Index: https://svn.onehippo.org/repos/closed/projects/ons/trunk/defensie/bootstrap/configuration/src/main/resources/namespaces/defensiebaz/illustrationupload.xml =================================================================== --- https://svn.onehippo.org/repos/closed/projects/ons/trunk/defensie/bootstrap/configuration/src/main/resources/namespaces/defensiebaz/illustrationupload.xml (revision 174096) +++ https://svn.onehippo.org/repos/closed/projects/ons/trunk/defensie/bootstrap/configuration/src/main/resources/namespaces/defensiebaz/illustrationupload.xml (revision 174097) @@ -61,6 +61,7 @@ platformcomponents:documentresource + resource-required required Index: https://svn.onehippo.org/repos/closed/projects/ons/trunk/defensie/bootstrap/configuration/src/main/resources/namespaces/defensiebaz/mutationupload.xml =================================================================== --- https://svn.onehippo.org/repos/closed/projects/ons/trunk/defensie/bootstrap/configuration/src/main/resources/namespaces/defensiebaz/mutationupload.xml (revision 174096) +++ https://svn.onehippo.org/repos/closed/projects/ons/trunk/defensie/bootstrap/configuration/src/main/resources/namespaces/defensiebaz/mutationupload.xml (revision 174097) @@ -61,6 +61,7 @@ platformcomponents:documentresource + resource-required required Index: plugins/core/cms/src/main/java/nl/rijksoverheid/platform/cms/frontend/plugins/validator/ResourceRequiredValidator.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- plugins/core/cms/src/main/java/nl/rijksoverheid/platform/cms/frontend/plugins/validator/ResourceRequiredValidator.java (revision 174097) +++ plugins/core/cms/src/main/java/nl/rijksoverheid/platform/cms/frontend/plugins/validator/ResourceRequiredValidator.java (revision 174097) @@ -0,0 +1,76 @@ +package nl.rijksoverheid.platform.cms.frontend.plugins.validator; + +import java.util.HashSet; +import java.util.Set; + +import javax.jcr.Node; +import javax.jcr.Property; +import javax.jcr.RepositoryException; +import javax.jcr.Session; +import javax.jcr.nodetype.NodeType; +import javax.jcr.nodetype.NodeTypeManager; + +import org.apache.wicket.model.IModel; +import org.hippoecm.frontend.editor.validator.plugins.AbstractCmsValidator; +import org.hippoecm.frontend.model.JcrNodeModel; +import org.hippoecm.frontend.plugin.IPluginContext; +import org.hippoecm.frontend.plugin.config.IPluginConfig; +import org.hippoecm.frontend.validation.IFieldValidator; +import org.hippoecm.frontend.validation.ValidationException; +import org.hippoecm.frontend.validation.Violation; +import org.hippoecm.repository.api.HippoNodeType; + +import nl.rijksoverheid.platform.cms.util.PluginHelper; + +/** + * ResourceRequiredValidator validates fields that are a (subtype of) {@link: HippoNodeType.NT_RESOURCE} that a resource + * has been uploaded. + * + * @author David de Bos + */ +public class ResourceRequiredValidator extends AbstractCmsValidator { + + public static final String INVALID_VALIDATION_EXCEPTION_ERROR_MESSAGE = "Invalid validation exception. " + + "A ResourceRequiredValidator can only be used for field types that are a (subtype of) " + + HippoNodeType.NT_RESOURCE; + + public ResourceRequiredValidator(final IPluginContext context, final IPluginConfig config) { + super(context, config); + } + + @Override + public void preValidation(final IFieldValidator type) throws ValidationException { + if (!isAHippoResource(type)) { + throw new ValidationException(INVALID_VALIDATION_EXCEPTION_ERROR_MESSAGE); + } + } + + private boolean isAHippoResource(final IFieldValidator type) throws ValidationException { + String jcrTypeName = type.getFieldType().getType(); + try { + Session jcrSession = PluginHelper.obtainJcrSession(); + NodeTypeManager typeManager = jcrSession.getWorkspace().getNodeTypeManager(); + NodeType nodeType = typeManager.getNodeType(jcrTypeName); + return nodeType.isNodeType(HippoNodeType.NT_RESOURCE); + } catch (RepositoryException e) { + throw new ValidationException(e); + } + } + + @Override + public Set validate(final IFieldValidator fieldValidator, final JcrNodeModel model, + final IModel childModel) throws ValidationException { + Set violations = new HashSet<>(); + try { + Node node = ((JcrNodeModel) childModel).getNode(); + Property resourceData = node.getProperty("jcr:data"); + if (!(resourceData.getLength() > 0)) { + violations.add(fieldValidator.newValueViolation(childModel, getTranslation())); + } + } catch (Exception e) { + throw new ValidationException(e); + } + + return violations; + } +} Index: plugins/core/repository/src/main/resources/configuration/frontend/cms-validators/resource-required-translations.xml IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- plugins/core/repository/src/main/resources/configuration/frontend/cms-validators/resource-required-translations.xml (revision 174097) +++ plugins/core/repository/src/main/resources/configuration/frontend/cms-validators/resource-required-translations.xml (revision 174097) @@ -0,0 +1,31 @@ + + + + frontend:pluginconfig + + + hippo:translated + + + + hippo:translation + + + nl + + + U moet een bestand uploaden + + + + + hippo:translation + + + en + + + You must upload a file + + + Index: plugins/core/repository/src/main/resources/configuration/frontend/cms-validators/resource-required.xml IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- plugins/core/repository/src/main/resources/configuration/frontend/cms-validators/resource-required.xml (revision 174097) +++ plugins/core/repository/src/main/resources/configuration/frontend/cms-validators/resource-required.xml (revision 174097) @@ -0,0 +1,9 @@ + + + + frontend:plugin + + + nl.rijksoverheid.platform.cms.frontend.plugins.validator.ResourceRequiredValidator + + Index: plugins/core/repository/src/main/resources/hippoecm-extension.xml IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- plugins/core/repository/src/main/resources/hippoecm-extension.xml (revision 174096) +++ plugins/core/repository/src/main/resources/hippoecm-extension.xml (revision 174097) @@ -1968,6 +1968,42 @@ + + + true + + + hippo:initializeitem + + + 32002.8 + + + configuration/frontend/cms-validators/resource-required.xml + + + /hippo:configuration/hippo:frontend/cms/cms-validators + + + + + + true + + + hippo:initializeitem + + + 32002.9 + + + configuration/frontend/cms-validators/resource-required-translations.xml + + + /hippo:configuration/hippo:frontend/cms/cms-validators/validationTranslator/hippostd:translations + + + hippo:initializeitem \ No newline at end of file