You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2018/02/24 22:34:03 UTC

[isis] 04/07: ISIS-1880 introduce new value type LocalResourcePath

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 80d47de47c9338607110b31b789d041ed62249a0
Author: Andi Huber <ah...@apache.org>
AuthorDate: Sat Feb 24 23:27:50 2018 +0100

    ISIS-1880 introduce new value type LocalResourcePath
    
    like java.net.URL but for web-app internal (context-path relative)
    resource links
---
 .../isis/applib/value/LocalResourcePath.java       |  76 ++++++++++++
 .../localrespath/LocalResourcePathValueFacet.java  |  31 +++++
 ...athValueFacetUsingSemanticsProviderFactory.java |  44 +++++++
 .../LocalResourcePathValueSemanticsProvider.java   | 131 +++++++++++++++++++++
 .../dflt/ProgrammingModelFacetsJava5.java          |   9 +-
 5 files changed, 287 insertions(+), 4 deletions(-)

diff --git a/core/applib/src/main/java/org/apache/isis/applib/value/LocalResourcePath.java b/core/applib/src/main/java/org/apache/isis/applib/value/LocalResourcePath.java
new file mode 100644
index 0000000..d166281
--- /dev/null
+++ b/core/applib/src/main/java/org/apache/isis/applib/value/LocalResourcePath.java
@@ -0,0 +1,76 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.applib.value;
+
+import java.io.Serializable;
+import java.nio.file.InvalidPathException;
+
+import javax.annotation.Nonnull;
+
+import org.apache.isis.applib.annotation.Value;
+
+/**
+ * Represents a local resource path, typically a relative path originating at this web-app's root or context-root.
+ */
+@Value(semanticsProviderName = "org.apache.isis.core.metamodel.facets.value.localrespath.LocalResourcePathValueSemanticsProvider")
+public final class LocalResourcePath implements Serializable {
+    private static final long serialVersionUID = 1L;
+    private final String path;
+
+    public LocalResourcePath(final String path) throws InvalidPathException {
+    	
+    	//TODO throw InvalidPathException if path is not sane
+    	
+        this.path = path != null ? path : "";
+    }
+
+    @Nonnull
+    public Object getValue() {
+        return path;
+    }
+
+    @Nonnull
+    public String getPath() {
+        return path;
+    }
+    
+    @Override
+    public String toString() {
+        return "LocalResourcePath [path=" + path + "]";
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+    	if(obj==null)
+    		return false;
+    	
+    	return (obj instanceof LocalResourcePath) ?	isEqualTo((LocalResourcePath)obj) : false;
+    }
+    
+    public boolean isEqualTo(LocalResourcePath other) {
+    	if(other==null)
+    		return false;
+    	
+    	return this.getPath().equals(other.getPath());
+    }
+    
+
+
+}
\ No newline at end of file
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/localrespath/LocalResourcePathValueFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/localrespath/LocalResourcePathValueFacet.java
new file mode 100644
index 0000000..b8da3b1
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/localrespath/LocalResourcePathValueFacet.java
@@ -0,0 +1,31 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.facets.value.localrespath;
+
+import org.apache.isis.applib.value.LocalResourcePath;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+
+public interface LocalResourcePathValueFacet extends Facet {
+	LocalResourcePath localResourcePathValue(ObjectAdapter object);
+
+    ObjectAdapter createValue(LocalResourcePath value);
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/localrespath/LocalResourcePathValueFacetUsingSemanticsProviderFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/localrespath/LocalResourcePathValueFacetUsingSemanticsProviderFactory.java
new file mode 100644
index 0000000..d698bc7
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/localrespath/LocalResourcePathValueFacetUsingSemanticsProviderFactory.java
@@ -0,0 +1,44 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.facets.value.localrespath;
+
+import org.apache.isis.applib.value.LocalResourcePath;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueFacetUsingSemanticsProviderFactory;
+
+public class LocalResourcePathValueFacetUsingSemanticsProviderFactory 
+extends ValueFacetUsingSemanticsProviderFactory<LocalResourcePath> {
+
+    public LocalResourcePathValueFacetUsingSemanticsProviderFactory() {
+        super();
+    }
+
+    @Override
+    public void process(final ProcessClassContext processClassContext) {
+        final Class<?> type = processClassContext.getCls();
+        final FacetHolder holder = processClassContext.getFacetHolder();
+
+        if (type != LocalResourcePath.class) {
+            return;
+        }
+        addFacets(new LocalResourcePathValueSemanticsProvider(holder, getContext()));
+    }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/localrespath/LocalResourcePathValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/localrespath/LocalResourcePathValueSemanticsProvider.java
new file mode 100644
index 0000000..bd2f56c
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/value/localrespath/LocalResourcePathValueSemanticsProvider.java
@@ -0,0 +1,131 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.core.metamodel.facets.value.localrespath;
+
+import java.nio.file.InvalidPathException;
+
+import org.apache.isis.applib.adapters.EncoderDecoder;
+import org.apache.isis.applib.adapters.Parser;
+import org.apache.isis.applib.value.LocalResourcePath;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.object.value.vsp.ValueSemanticsProviderAndFacetAbstract;
+import org.apache.isis.core.metamodel.services.ServicesInjector;
+
+public class LocalResourcePathValueSemanticsProvider 
+extends ValueSemanticsProviderAndFacetAbstract<LocalResourcePath> implements LocalResourcePathValueFacet {
+
+
+    public static Class<? extends Facet> type() {
+        return LocalResourcePathValueFacet.class;
+    }
+
+    public static final int MAX_LENGTH = 2083;
+    private static final int TYPICAL_LENGTH = 100;
+    private static final LocalResourcePath DEFAULT_VALUE = null; // no default
+
+    /**
+     * Required because implementation of {@link Parser} and
+     * {@link EncoderDecoder}.
+     */
+    public LocalResourcePathValueSemanticsProvider() {
+        this(null, null);
+    }
+
+    public LocalResourcePathValueSemanticsProvider(final FacetHolder holder, final ServicesInjector context) {
+        super(type(), holder, LocalResourcePath.class, 
+                TYPICAL_LENGTH, MAX_LENGTH, Immutability.IMMUTABLE, EqualByContent.HONOURED, DEFAULT_VALUE,
+                context);
+    }
+
+    // //////////////////////////////////////////////////////////////////
+    // Parser
+    // //////////////////////////////////////////////////////////////////
+
+    @Override
+    protected LocalResourcePath doParse(final Object context, final String entry) {
+        if (entry.trim().equals("")) {
+            return null;
+        } 
+    
+        try {
+            return new LocalResourcePath(entry);
+        } catch (final InvalidPathException ex) {
+            throw new IllegalArgumentException("Not parseable as a LocalResourcePath ('" + entry + "')", ex);
+        }
+    
+    }
+
+    @Override
+    public String titleString(final Object object) {
+        return object != null ? object.toString(): "";
+    }
+
+    @Override
+    public String titleStringWithMask(final Object object, final String usingMask) {
+        return titleString(object);
+    }
+
+    // //////////////////////////////////////////////////////////////////
+    // EncoderDecoder
+    // //////////////////////////////////////////////////////////////////
+
+    @Override
+    protected String doEncode(final Object object) {
+        final LocalResourcePath url = (LocalResourcePath) object;
+        return url != null ? url.getPath() : "NULL";
+    }
+
+    @Override
+    protected LocalResourcePath doRestore(final String data) {
+        if("NULL".equals(data)) {
+            return null;
+        }
+        try {
+            return new LocalResourcePath(data);
+        } catch (InvalidPathException e) {
+            return null;
+        }
+    }
+
+
+    // //////////////////////////////////////////////////////////////////
+    // StringValueFacet
+    // //////////////////////////////////////////////////////////////////
+
+    @Override
+    public LocalResourcePath localResourcePathValue(final ObjectAdapter object) {
+        return object == null ? null : (LocalResourcePath) object.getObject();
+    }
+
+    @Override
+    public ObjectAdapter createValue(final LocalResourcePath value) {
+        return getAdapterManager().adapterFor(value);
+    }
+
+    // /////// toString ///////
+
+    @Override
+    public String toString() {
+        return "LocalResourcePathValueSemanticsProvider";
+    }
+
+}
diff --git a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
index e96588f..11ac0e1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
+++ b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
@@ -19,8 +19,6 @@ package org.apache.isis.progmodels.dflt;
 
 import java.util.List;
 
-import com.google.common.collect.Lists;
-
 import org.apache.isis.core.commons.config.IsisConfiguration;
 import org.apache.isis.core.metamodel.facets.actions.action.ActionAnnotationFacetFactory;
 import org.apache.isis.core.metamodel.facets.actions.action.ActionChoicesForCollectionParameterFacetFactory;
@@ -84,7 +82,6 @@ import org.apache.isis.core.metamodel.facets.object.immutable.immutableannot.Cop
 import org.apache.isis.core.metamodel.facets.object.membergroups.annotprop.MemberGroupLayoutFacetFactory;
 import org.apache.isis.core.metamodel.facets.object.mixin.MixinFacetForMixinAnnotationFactory;
 import org.apache.isis.core.metamodel.facets.object.navparent.annotation.NavigableParentAnnotationFacetFactory;
-import org.apache.isis.core.metamodel.facets.object.navparent.method.NavigableParentFacetMethodFactory;
 import org.apache.isis.core.metamodel.facets.object.objectspecid.classname.ObjectSpecIdFacetDerivedFromClassNameFactory;
 import org.apache.isis.core.metamodel.facets.object.objectvalidprops.impl.ObjectValidPropertiesFacetImplFactory;
 import org.apache.isis.core.metamodel.facets.object.parseable.annotcfg.ParseableFacetAnnotationElseConfigurationFactory;
@@ -102,7 +99,6 @@ import org.apache.isis.core.metamodel.facets.param.choices.method.ActionChoicesF
 import org.apache.isis.core.metamodel.facets.param.choices.methodnum.ActionParameterChoicesFacetViaMethodFactory;
 import org.apache.isis.core.metamodel.facets.param.defaults.fromtype.ActionParameterDefaultFacetDerivedFromTypeFactory;
 import org.apache.isis.core.metamodel.facets.param.defaults.methodnum.ActionParameterDefaultsFacetViaMethodFactory;
-import org.apache.isis.core.metamodel.postprocessors.param.ActionCollectionParameterDefaultsAndChoicesPostProcessor;
 import org.apache.isis.core.metamodel.facets.param.describedas.annotderived.DescribedAsFacetOnParameterAnnotationElseDerivedFromTypeFactory;
 import org.apache.isis.core.metamodel.facets.param.layout.ParameterLayoutFacetFactory;
 import org.apache.isis.core.metamodel.facets.param.mandatory.dflt.MandatoryFacetOnParametersDefaultFactory;
@@ -154,6 +150,7 @@ import org.apache.isis.core.metamodel.facets.value.image.ImageValueFacetUsingSem
 import org.apache.isis.core.metamodel.facets.value.imageawt.JavaAwtImageValueFacetUsingSemanticsProviderFactory;
 import org.apache.isis.core.metamodel.facets.value.integer.IntPrimitiveValueFacetUsingSemanticsProviderFactory;
 import org.apache.isis.core.metamodel.facets.value.integer.IntWrapperValueFacetUsingSemanticsProviderFactory;
+import org.apache.isis.core.metamodel.facets.value.localrespath.LocalResourcePathValueFacetUsingSemanticsProviderFactory;
 import org.apache.isis.core.metamodel.facets.value.longs.LongPrimitiveValueFacetUsingSemanticsProviderFactory;
 import org.apache.isis.core.metamodel.facets.value.longs.LongWrapperValueFacetUsingSemanticsProviderFactory;
 import org.apache.isis.core.metamodel.facets.value.money.MoneyValueFacetUsingSemanticsProviderFactory;
@@ -168,9 +165,12 @@ import org.apache.isis.core.metamodel.facets.value.timestamp.TimeStampValueFacet
 import org.apache.isis.core.metamodel.facets.value.timestampsql.JavaSqlTimeStampValueFacetUsingSemanticsProviderFactory;
 import org.apache.isis.core.metamodel.facets.value.url.URLValueFacetUsingSemanticsProviderFactory;
 import org.apache.isis.core.metamodel.facets.value.uuid.UUIDValueFacetUsingSemanticsProviderFactory;
+import org.apache.isis.core.metamodel.postprocessors.param.ActionCollectionParameterDefaultsAndChoicesPostProcessor;
 import org.apache.isis.core.metamodel.progmodel.ObjectSpecificationPostProcessor;
 import org.apache.isis.core.metamodel.progmodel.ProgrammingModelAbstract;
 
+import com.google.common.collect.Lists;
+
 public final class ProgrammingModelFacetsJava5 extends ProgrammingModelAbstract {
 
     public ProgrammingModelFacetsJava5(final IsisConfiguration configuration) {
@@ -376,6 +376,7 @@ public final class ProgrammingModelFacetsJava5 extends ProgrammingModelAbstract
         addFactory(new JavaSqlTimeStampValueFacetUsingSemanticsProviderFactory());
         addFactory(new StringValueFacetUsingSemanticsProviderFactory());
         addFactory(new URLValueFacetUsingSemanticsProviderFactory());
+        addFactory(new LocalResourcePathValueFacetUsingSemanticsProviderFactory());
         addFactory(new UUIDValueFacetUsingSemanticsProviderFactory());
 
         addFactory(new JavaAwtImageValueFacetUsingSemanticsProviderFactory());

-- 
To stop receiving notification emails like this one, please contact
ahuber@apache.org.