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.