You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2012/12/03 14:24:33 UTC
[3/3] ISIS-282: mostly implemented
http://git-wip-us.apache.org/repos/asf/isis/blob/22cdbe0d/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/MoneyValueSemanticsProviderTest.java
----------------------------------------------------------------------
diff --git a/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/MoneyValueSemanticsProviderTest.java b/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/MoneyValueSemanticsProviderTest.java
index 23f7d39..2933b15 100644
--- a/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/MoneyValueSemanticsProviderTest.java
+++ b/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/MoneyValueSemanticsProviderTest.java
@@ -45,8 +45,6 @@ public class MoneyValueSemanticsProviderTest extends ValueSemanticsProviderAbstr
@Before
public void setUpObjects() throws Exception {
Locale.setDefault(Locale.UK);
- setupSpecification(Money.class);
- // originalMoney = new Money(10.5, "gbp");
holder = new FacetHolderImpl();
setValue(adapter = new MoneyValueSemanticsProvider(holder, mockConfiguration, mockContext));
}
http://git-wip-us.apache.org/repos/asf/isis/blob/22cdbe0d/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/PercentageValueSemanticsProviderTest.java
----------------------------------------------------------------------
diff --git a/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/PercentageValueSemanticsProviderTest.java b/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/PercentageValueSemanticsProviderTest.java
index b0ba505..2696e12 100644
--- a/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/PercentageValueSemanticsProviderTest.java
+++ b/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/PercentageValueSemanticsProviderTest.java
@@ -45,8 +45,6 @@ public class PercentageValueSemanticsProviderTest extends ValueSemanticsProvider
}
});
- setupSpecification(Percentage.class);
-
percentage = new Percentage(0.105f);
allowMockAdapterToReturn(percentage);
http://git-wip-us.apache.org/repos/asf/isis/blob/22cdbe0d/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/PolishMoneyValueSemanticsProviderTest.java
----------------------------------------------------------------------
diff --git a/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/PolishMoneyValueSemanticsProviderTest.java b/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/PolishMoneyValueSemanticsProviderTest.java
index 4e9cad1..1bb9068 100644
--- a/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/PolishMoneyValueSemanticsProviderTest.java
+++ b/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/PolishMoneyValueSemanticsProviderTest.java
@@ -53,7 +53,6 @@ public class PolishMoneyValueSemanticsProviderTest extends ValueSemanticsProvide
@Before
public void setUpObjects() throws Exception {
Locale.setDefault(new Locale("pl", "PL"));
- setupSpecification(Money.class);
originalMoney = new Money(10.50, "pln");
holder = new FacetHolderImpl();
setValue(adapter = new MoneyValueSemanticsProvider(holder, mockConfiguration, mockContext));
http://git-wip-us.apache.org/repos/asf/isis/blob/22cdbe0d/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/TimeValueSemanticsProviderTest.java
----------------------------------------------------------------------
diff --git a/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/TimeValueSemanticsProviderTest.java b/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/TimeValueSemanticsProviderTest.java
index 78ff1e7..bc67d2f 100644
--- a/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/TimeValueSemanticsProviderTest.java
+++ b/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/TimeValueSemanticsProviderTest.java
@@ -49,7 +49,6 @@ public class TimeValueSemanticsProviderTest extends ValueSemanticsProviderAbstra
});
TestClock.initialize();
- setupSpecification(Time.class);
time = new Time(8, 13);
holder = new FacetHolderImpl();
setValue(adapter = new TimeValueSemanticsProvider(holder, mockConfiguration, mockContext));
http://git-wip-us.apache.org/repos/asf/isis/blob/22cdbe0d/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/ValueSemanticsProviderAbstractTestCase.java
----------------------------------------------------------------------
diff --git a/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/ValueSemanticsProviderAbstractTestCase.java b/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/ValueSemanticsProviderAbstractTestCase.java
index c4c6138..898cd4d 100644
--- a/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/ValueSemanticsProviderAbstractTestCase.java
+++ b/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/ValueSemanticsProviderAbstractTestCase.java
@@ -20,8 +20,10 @@
package org.apache.isis.core.progmodel.facets.value;
import static org.apache.isis.core.testsupport.jmock.ReturnArgumentJMockAction.returnArgument;
+import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
import static org.junit.Assert.fail;
import java.util.Locale;
@@ -29,6 +31,7 @@ import java.util.Locale;
import org.jmock.Expectations;
import org.jmock.auto.Mock;
import org.junit.After;
+import org.junit.Assume;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -56,7 +59,6 @@ public abstract class ValueSemanticsProviderAbstractTestCase {
@Rule
public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
-
private ValueSemanticsProviderAndFacetAbstract<?> valueSemanticsProvider;
private EncodableFacetUsingEncoderDecoder encodeableFacet;
private ParseableFacetUsingParser parseableFacet;
@@ -134,19 +136,13 @@ public abstract class ValueSemanticsProviderAbstractTestCase {
return parseableFacet;
}
- protected void setupSpecification(final Class<?> type) {
- // final TestProxySpecification specification =
- // system.getSpecification(cls);
- // specification.setupHasNoIdentity(true);
- }
-
protected ObjectAdapter createAdapter(final Object object) {
- // return system.createAdapterForTransient(object);
return mockAdapter;
}
@Test
public void testParseNull() throws Exception {
+ Assume.assumeThat(valueSemanticsProvider.getParser(), is(not(nullValue())));
try {
valueSemanticsProvider.parseTextEntry(null, null, null);
fail();
@@ -156,18 +152,24 @@ public abstract class ValueSemanticsProviderAbstractTestCase {
@Test
public void testParseEmptyString() throws Exception {
+ Assume.assumeThat(valueSemanticsProvider.getParser(), is(not(nullValue())));
+
final Object newValue = valueSemanticsProvider.parseTextEntry(null, "", null);
assertNull(newValue);
}
@Test
public void testDecodeNULL() throws Exception {
+ Assume.assumeThat(valueSemanticsProvider.getEncoderDecoder(), is(not(nullValue())));
+
final Object newValue = encodeableFacet.fromEncodedString(EncodableFacetUsingEncoderDecoder.ENCODED_NULL);
assertNull(newValue);
}
@Test
public void testEmptyEncoding() {
+ Assume.assumeThat(valueSemanticsProvider.getEncoderDecoder(), is(not(nullValue())));
+
assertEquals(EncodableFacetUsingEncoderDecoder.ENCODED_NULL, encodeableFacet.toEncodedString(null));
}
@@ -175,5 +177,4 @@ public abstract class ValueSemanticsProviderAbstractTestCase {
public void testTitleOfForNullObject() {
assertEquals("", valueSemanticsProvider.displayTitleOf(null, (Localization) null));
}
-
}
http://git-wip-us.apache.org/repos/asf/isis/blob/22cdbe0d/framework/progmodels/dflt/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
----------------------------------------------------------------------
diff --git a/framework/progmodels/dflt/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java b/framework/progmodels/dflt/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
index 408160a..dd5fded 100644
--- a/framework/progmodels/dflt/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
+++ b/framework/progmodels/dflt/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
@@ -155,12 +155,14 @@ import org.apache.isis.core.progmodel.facets.properties.validate.perspec.MustSat
import org.apache.isis.core.progmodel.facets.properties.validate.regexannot.RegExFacetAnnotationForPropertyFacetFactory;
import org.apache.isis.core.progmodel.facets.value.bigdecimal.BigDecimalValueTypeFacetFactory;
import org.apache.isis.core.progmodel.facets.value.biginteger.BigIntegerValueTypeFacetFactory;
+import org.apache.isis.core.progmodel.facets.value.blobs.BlobValueTypeFacetFactory;
import org.apache.isis.core.progmodel.facets.value.booleans.BooleanPrimitiveValueTypeFacetFactory;
import org.apache.isis.core.progmodel.facets.value.booleans.BooleanWrapperValueTypeFacetFactory;
import org.apache.isis.core.progmodel.facets.value.bytes.BytePrimitiveValueTypeFacetFactory;
import org.apache.isis.core.progmodel.facets.value.bytes.ByteWrapperValueTypeFacetFactory;
import org.apache.isis.core.progmodel.facets.value.chars.CharPrimitiveValueTypeFacetFactory;
import org.apache.isis.core.progmodel.facets.value.chars.CharWrapperValueTypeFacetFactory;
+import org.apache.isis.core.progmodel.facets.value.clobs.ClobValueTypeFacetFactory;
import org.apache.isis.core.progmodel.facets.value.color.ColorValueTypeFacetFactory;
import org.apache.isis.core.progmodel.facets.value.date.DateValueTypeFacetFactory;
import org.apache.isis.core.progmodel.facets.value.datejodalocal.JodaLocalDateValueTypeFacetFactory;
@@ -401,7 +403,11 @@ public final class ProgrammingModelFacetsJava5 extends ProgrammingModelAbstract
addFactory(JavaSqlTimeStampValueTypeFacetFactory.class);
addFactory(StringValueTypeFacetFactory.class);
+ addFactory(JavaAwtImageValueTypeFacetFactory.class);
+
// applib values
+ addFactory(BlobValueTypeFacetFactory.class);
+ addFactory(ClobValueTypeFacetFactory.class);
addFactory(DateValueTypeFacetFactory.class);
addFactory(DateTimeValueTypeFacetFactory.class);
addFactory(ColorValueTypeFacetFactory.class);
@@ -411,7 +417,6 @@ public final class ProgrammingModelFacetsJava5 extends ProgrammingModelAbstract
addFactory(TimeStampValueTypeFacetFactory.class);
addFactory(TimeValueTypeFacetFactory.class);
addFactory(ImageValueTypeFacetFactory.class);
- addFactory(JavaAwtImageValueTypeFacetFactory.class);
// jodatime values
addFactory(JodaLocalDateValueTypeFacetFactory.class);
http://git-wip-us.apache.org/repos/asf/isis/blob/22cdbe0d/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/resources/plugin.xml
----------------------------------------------------------------------
diff --git a/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/resources/plugin.xml b/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/resources/plugin.xml
index 41474b3..426a18b 100644
--- a/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/resources/plugin.xml
+++ b/framework/runtimes/dflt/objectstores/jdo/jdo-applib/src/main/resources/plugin.xml
@@ -32,6 +32,19 @@
dfg="true"
embedded="true"
long-converter="org.apache.isis.runtimes.dflt.objectstores.jdo.datanucleus.valuetypes.IsisDateTimeConverter"/>
+
+ <java-type
+ name="org.apache.isis.applib.value.Blob"
+ persistent="true"
+ dfg="false"
+ embedded="true"
+ string-converter="org.apache.isis.runtimes.dflt.objectstores.jdo.datanucleus.valuetypes.IsisBlobConverter"/>
+ <java-type
+ name="org.apache.isis.applib.value.Clob"
+ persistent="true"
+ dfg="false"
+ embedded="true"
+ string-converter="org.apache.isis.runtimes.dflt.objectstores.jdo.datanucleus.valuetypes.IsisClobConverter"/>
</extension>
<extension point="org.datanucleus.store_mapping">
@@ -41,15 +54,13 @@
<mapping
java-type="org.apache.isis.applib.value.DateTime"
mapping-class="org.apache.isis.runtimes.dflt.objectstores.jdo.datanucleus.valuetypes.IsisDateTimeMapping"/>
-<!-- <mapping
- java-type="org.joda.time.LocalDate"
- mapping-class="org.apache.isis.runtimes.dflt.objectstores.jdo.datanucleus.valuetypes.JodaLocalDateMapping"/>
+
<mapping
- java-type="org.joda.time.DateTime"
- mapping-class="org.apache.isis.runtimes.dflt.objectstores.jdo.datanucleus.valuetypes.JodaDateTimeMapping"/>
+ java-type="org.apache.isis.applib.value.Blob"
+ mapping-class="org.apache.isis.runtimes.dflt.objectstores.jdo.datanucleus.valuetypes.IsisBlobMapping"/>
<mapping
- java-type="org.joda.time.LocalDateTime"
- mapping-class="org.apache.isis.runtimes.dflt.objectstores.jdo.datanucleus.valuetypes.JodaLocalDateTimeMapping"/>
--->
+ java-type="org.apache.isis.applib.value.Clob"
+ mapping-class="org.apache.isis.runtimes.dflt.objectstores.jdo.datanucleus.valuetypes.IsisClobMapping"/>
+
</extension>
</plugin>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/22cdbe0d/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java
----------------------------------------------------------------------
diff --git a/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java b/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java
index 939bff5..d85b382 100644
--- a/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java
+++ b/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java
@@ -63,6 +63,10 @@ import org.apache.isis.runtimes.dflt.runtime.system.persistence.PersistenceSessi
import org.apache.isis.runtimes.dflt.runtime.system.transaction.EnlistedObjectDirtying;
import org.apache.isis.runtimes.dflt.runtime.system.transaction.IsisTransactionManager;
+import com.google.common.base.Optional;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
+
/**
* Configuration files are read in the usual fashion (as per {@link Installer#getConfigurationResources()}, ie will consult all of:
* <ul>
http://git-wip-us.apache.org/repos/asf/isis/blob/22cdbe0d/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/valuetypes/IsisBlobConverter.java
----------------------------------------------------------------------
diff --git a/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/valuetypes/IsisBlobConverter.java b/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/valuetypes/IsisBlobConverter.java
new file mode 100644
index 0000000..aadd5fc
--- /dev/null
+++ b/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/valuetypes/IsisBlobConverter.java
@@ -0,0 +1,27 @@
+package org.apache.isis.runtimes.dflt.objectstores.jdo.datanucleus.valuetypes;
+
+import org.apache.isis.applib.adapters.EncoderDecoder;
+import org.apache.isis.applib.value.Blob;
+import org.apache.isis.core.progmodel.facets.value.blobs.BlobValueSemanticsProvider;
+import org.datanucleus.store.types.converters.TypeConverter;
+
+public class IsisBlobConverter implements TypeConverter<Blob, String>{
+
+ private static final long serialVersionUID = 1L;
+ private EncoderDecoder<Blob> encoderDecoder;
+
+ public IsisBlobConverter() {
+ encoderDecoder = new BlobValueSemanticsProvider().getEncoderDecoder();
+ }
+
+ @Override
+ public String toDatastoreType(Blob memberValue) {
+ return encoderDecoder.toEncodedString(memberValue);
+ }
+
+ @Override
+ public Blob toMemberType(String datastoreValue) {
+ return encoderDecoder.fromEncodedString(datastoreValue);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/22cdbe0d/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/valuetypes/IsisBlobMapping.java
----------------------------------------------------------------------
diff --git a/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/valuetypes/IsisBlobMapping.java b/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/valuetypes/IsisBlobMapping.java
new file mode 100644
index 0000000..02d50ee
--- /dev/null
+++ b/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/valuetypes/IsisBlobMapping.java
@@ -0,0 +1,88 @@
+package org.apache.isis.runtimes.dflt.objectstores.jdo.datanucleus.valuetypes;
+
+import org.apache.isis.applib.value.Blob;
+import org.datanucleus.ClassLoaderResolver;
+import org.datanucleus.ClassNameConstants;
+import org.datanucleus.NucleusContext;
+import org.datanucleus.metadata.AbstractMemberMetaData;
+import org.datanucleus.store.ExecutionContext;
+import org.datanucleus.store.mapped.DatastoreContainerObject;
+import org.datanucleus.store.mapped.MappedStoreManager;
+import org.datanucleus.store.mapped.mapping.SingleFieldMultiMapping;
+
+public class IsisBlobMapping extends SingleFieldMultiMapping {
+
+ public IsisBlobMapping() {
+ }
+
+ @Override
+ public Class<?> getJavaType() {
+ return org.apache.isis.applib.value.Blob.class;
+ }
+
+ public void initialize(AbstractMemberMetaData mmd, DatastoreContainerObject container, ClassLoaderResolver clr)
+ {
+ super.initialize(mmd, container, clr);
+ addDatastoreFields();
+ }
+
+ public void initialize(MappedStoreManager storeMgr, String type)
+ {
+ super.initialize(storeMgr, type);
+ addDatastoreFields();
+ }
+
+ protected void addDatastoreFields()
+ {
+ addDatastoreField(ClassNameConstants.JAVA_LANG_STRING); // name
+ addDatastoreField(ClassNameConstants.JAVA_LANG_STRING); // mime type
+ addDatastoreField(ClassNameConstants.JAVA_LANG_BYTE_ARRAY); // bytes
+ }
+
+ public Object getValueForDatastoreMapping(NucleusContext nucleusCtx, int index, Object value)
+ {
+ Blob blob = ((Blob)value);
+ switch (index) {
+ case 0: return blob.getName();
+ case 1: return blob.getMimeType().getBaseType();
+ case 2: return blob.getBytes();
+ }
+ throw new IndexOutOfBoundsException();
+ }
+
+ public void setObject(ExecutionContext ec, Object preparedStmt, int[] exprIndex, Object value)
+ {
+ Blob blob = ((Blob)value);
+ if (blob == null) {
+ getDatastoreMapping(0).setObject(preparedStmt, exprIndex[0], null);
+ getDatastoreMapping(1).setObject(preparedStmt, exprIndex[1], null);
+ getDatastoreMapping(2).setObject(preparedStmt, exprIndex[2], null);
+ } else {
+ getDatastoreMapping(0).setString(preparedStmt, exprIndex[0], blob.getName());
+ getDatastoreMapping(1).setString(preparedStmt, exprIndex[1], blob.getMimeType().getBaseType());
+ getDatastoreMapping(2).setObject(preparedStmt, exprIndex[2], blob.getBytes());
+ }
+ }
+
+ public Object getObject(ExecutionContext ec, Object resultSet, int[] exprIndex)
+ {
+ try
+ {
+ // Check for null entries
+ if (getDatastoreMapping(0).getObject(resultSet, exprIndex[0]) == null)
+ {
+ return null;
+ }
+ }
+ catch (Exception e)
+ {
+ // Do nothing
+ }
+
+ String name = getDatastoreMapping(0).getString(resultSet, exprIndex[0]);
+ String mimeTypeBase = getDatastoreMapping(1).getString(resultSet, exprIndex[1]);
+ byte[] bytes = (byte[]) getDatastoreMapping(2).getObject(resultSet,exprIndex[2]);
+ return new Blob(name, mimeTypeBase, bytes);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/22cdbe0d/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/valuetypes/IsisClobConverter.java
----------------------------------------------------------------------
diff --git a/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/valuetypes/IsisClobConverter.java b/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/valuetypes/IsisClobConverter.java
new file mode 100644
index 0000000..024b619
--- /dev/null
+++ b/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/valuetypes/IsisClobConverter.java
@@ -0,0 +1,27 @@
+package org.apache.isis.runtimes.dflt.objectstores.jdo.datanucleus.valuetypes;
+
+import org.apache.isis.applib.adapters.EncoderDecoder;
+import org.apache.isis.applib.value.Clob;
+import org.apache.isis.core.progmodel.facets.value.clobs.ClobValueSemanticsProvider;
+import org.datanucleus.store.types.converters.TypeConverter;
+
+public class IsisClobConverter implements TypeConverter<Clob, String>{
+
+ private static final long serialVersionUID = 1L;
+ private EncoderDecoder<Clob> encoderDecoder;
+
+ public IsisClobConverter() {
+ encoderDecoder = new ClobValueSemanticsProvider().getEncoderDecoder();
+ }
+
+ @Override
+ public String toDatastoreType(Clob memberValue) {
+ return encoderDecoder.toEncodedString(memberValue);
+ }
+
+ @Override
+ public Clob toMemberType(String datastoreValue) {
+ return encoderDecoder.fromEncodedString(datastoreValue);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/22cdbe0d/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/valuetypes/IsisClobMapping.java
----------------------------------------------------------------------
diff --git a/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/valuetypes/IsisClobMapping.java b/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/valuetypes/IsisClobMapping.java
new file mode 100644
index 0000000..5ab97fa
--- /dev/null
+++ b/framework/runtimes/dflt/objectstores/jdo/jdo-datanucleus/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/datanucleus/valuetypes/IsisClobMapping.java
@@ -0,0 +1,88 @@
+package org.apache.isis.runtimes.dflt.objectstores.jdo.datanucleus.valuetypes;
+
+import org.apache.isis.applib.value.Blob;
+import org.apache.isis.applib.value.Clob;
+import org.datanucleus.ClassLoaderResolver;
+import org.datanucleus.ClassNameConstants;
+import org.datanucleus.NucleusContext;
+import org.datanucleus.metadata.AbstractMemberMetaData;
+import org.datanucleus.store.ExecutionContext;
+import org.datanucleus.store.mapped.DatastoreContainerObject;
+import org.datanucleus.store.mapped.MappedStoreManager;
+import org.datanucleus.store.mapped.mapping.SingleFieldMultiMapping;
+
+public class IsisClobMapping extends SingleFieldMultiMapping {
+
+ public IsisClobMapping() {
+ }
+
+ @Override
+ public Class<?> getJavaType() {
+ return org.apache.isis.applib.value.Clob.class;
+ }
+
+ public void initialize(AbstractMemberMetaData mmd, DatastoreContainerObject container, ClassLoaderResolver clr)
+ {
+ super.initialize(mmd, container, clr);
+ addDatastoreFields();
+ }
+
+ public void initialize(MappedStoreManager storeMgr, String type)
+ {
+ super.initialize(storeMgr, type);
+ addDatastoreFields();
+ }
+
+ protected void addDatastoreFields()
+ {
+ addDatastoreField(ClassNameConstants.JAVA_LANG_STRING); // name
+ addDatastoreField(ClassNameConstants.JAVA_LANG_STRING); // mime type
+ addDatastoreField(ClassNameConstants.JAVA_LANG_CHARACTER_ARRAY); // chars
+ }
+
+ public Object getValueForDatastoreMapping(NucleusContext nucleusCtx, int index, Object value)
+ {
+ Clob clob = ((Clob)value);
+ switch (index) {
+ case 0: return clob.getName();
+ case 1: return clob.getMimeType().getBaseType();
+ case 2: return clob.getChars();
+ }
+ throw new IndexOutOfBoundsException();
+ }
+
+ public void setObject(ExecutionContext ec, Object preparedStmt, int[] exprIndex, Object value)
+ {
+ Clob clob = ((Clob)value);
+ if (clob == null) {
+ getDatastoreMapping(0).setObject(preparedStmt, exprIndex[0], null);
+ getDatastoreMapping(1).setObject(preparedStmt, exprIndex[1], null);
+ getDatastoreMapping(2).setObject(preparedStmt, exprIndex[2], null);
+ } else {
+ getDatastoreMapping(0).setString(preparedStmt, exprIndex[0], clob.getName());
+ getDatastoreMapping(1).setString(preparedStmt, exprIndex[1], clob.getMimeType().getBaseType());
+ getDatastoreMapping(2).setObject(preparedStmt, exprIndex[2], clob.getChars());
+ }
+ }
+
+ public Object getObject(ExecutionContext ec, Object resultSet, int[] exprIndex)
+ {
+ try
+ {
+ // Check for null entries
+ if (getDatastoreMapping(0).getObject(resultSet, exprIndex[0]) == null)
+ {
+ return null;
+ }
+ }
+ catch (Exception e)
+ {
+ // Do nothing
+ }
+
+ String name = getDatastoreMapping(0).getString(resultSet, exprIndex[0]);
+ String mimeTypeBase = getDatastoreMapping(1).getString(resultSet, exprIndex[1]);
+ char[] chars = (char[]) getDatastoreMapping(2).getObject(resultSet,exprIndex[2]);
+ return new Clob(name, mimeTypeBase, chars);
+ }
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/22cdbe0d/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/memento/Memento.java
----------------------------------------------------------------------
diff --git a/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/memento/Memento.java b/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/memento/Memento.java
index fab702c..7ae622f 100644
--- a/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/memento/Memento.java
+++ b/framework/runtimes/dflt/runtime/src/main/java/org/apache/isis/runtimes/dflt/runtime/memento/Memento.java
@@ -89,7 +89,7 @@ public class Memento implements Serializable {
////////////////////////////////////////////////
private Data createData(final ObjectAdapter adapter) {
- if (adapter.getSpecification().isParentedOrFreeCollection()) {
+ if (adapter.getSpecification().isParentedOrFreeCollection() && !adapter.getSpecification().isEncodeable()) {
return createCollectionData(adapter);
} else {
return createObjectData(adapter);
http://git-wip-us.apache.org/repos/asf/isis/blob/22cdbe0d/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobPanel.css
----------------------------------------------------------------------
diff --git a/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobPanel.css b/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobPanel.css
new file mode 100644
index 0000000..eaeea17
--- /dev/null
+++ b/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobPanel.css
@@ -0,0 +1,18 @@
+/*
+ * 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.
+ */
http://git-wip-us.apache.org/repos/asf/isis/blob/22cdbe0d/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobPanel.html
----------------------------------------------------------------------
diff --git a/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobPanel.html b/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobPanel.html
new file mode 100644
index 0000000..3c6603d
--- /dev/null
+++ b/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobPanel.html
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<html>
+ <body>
+ <wicket:panel>
+ <div class="isisBlobPanel scalarNameAndValueComponentType">
+ <label for="scalarValue" wicket:id="scalarIfRegular">
+ <span wicket:id="scalarName" class="scalarName">[Label text]</span>
+ <span class="scalarValue">
+ <input type="file" name="scalarValue" id="scalarValue" wicket:id="scalarValue"/>
+ </span>
+ <a wicket:id="scalarIfRegularDownload">Download</a>
+ <a wicket:id="scalarIfRegularClear">Clear</a>
+ <span wicket:id="feedback"></span>
+ </label>
+
+ <span wicket:id="scalarIfCompact">
+ <a wicket:id="scalarIfCompactDownload">Download</a>
+ </span>
+
+ </div>
+ </wicket:panel>
+ </body>
+</html>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/22cdbe0d/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobPanel.java
----------------------------------------------------------------------
diff --git a/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobPanel.java b/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobPanel.java
new file mode 100644
index 0000000..2799eed
--- /dev/null
+++ b/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobPanel.java
@@ -0,0 +1,204 @@
+/*
+ * 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.viewer.wicket.ui.components.scalars.isisapplib;
+
+import java.util.List;
+
+import org.apache.isis.applib.value.Blob;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.viewer.wicket.model.models.ScalarModel;
+import org.apache.isis.viewer.wicket.ui.components.bookmarkedpages.BookmarkedPagesPanel;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelAbstract;
+import org.apache.isis.viewer.wicket.ui.util.Components;
+import org.apache.log4j.Logger;
+import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.AjaxLink;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.FormComponentLabel;
+import org.apache.wicket.markup.html.form.upload.FileUpload;
+import org.apache.wicket.markup.html.form.upload.FileUploadField;
+import org.apache.wicket.markup.html.link.ResourceLink;
+import org.apache.wicket.markup.html.panel.ComponentFeedbackPanel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.request.resource.ByteArrayResource;
+
+/**
+ * Panel for rendering scalars of type {@link Blob Isis' applib.Blob}.
+ */
+public class IsisBlobPanel extends ScalarPanelAbstract {
+
+ private static final long serialVersionUID = 1L;
+
+ @SuppressWarnings("unused")
+ private static final Logger LOG = Logger.getLogger(IsisBlobPanel.class);
+
+ private static final String ID_SCALAR_IF_REGULAR = "scalarIfRegular";
+ private static final String ID_SCALAR_IF_REGULAR_DOWNLOAD = "scalarIfRegularDownload";
+ private static final String ID_SCALAR_IF_REGULAR_CLEAR = "scalarIfRegularClear";
+ private static final String ID_SCALAR_NAME = "scalarName";
+ private static final String ID_SCALAR_VALUE = "scalarValue";
+ private static final String ID_FEEDBACK = "feedback";
+
+ private static final String ID_SCALAR_IF_COMPACT = "scalarIfCompact";
+ private static final String ID_SCALAR_IF_COMPACT_DOWNLOAD = "scalarIfCompactDownload";
+
+ public IsisBlobPanel(final String id, final ScalarModel model) {
+ super(id, model);
+ }
+
+ @Override
+ protected FormComponentLabel addComponentForRegular() {
+ final FileUploadField fileUploadField = createFileUploadField(ID_SCALAR_VALUE);
+ fileUploadField.setLabel(Model.of(getModel().getName()));
+
+ final FormComponentLabel scalarIfRegular = new FormComponentLabel(ID_SCALAR_IF_REGULAR, fileUploadField);
+ scalarIfRegular.add(fileUploadField);
+
+ final Label scalarName = new Label(ID_SCALAR_NAME, getModel().getName());
+ scalarIfRegular.add(scalarName);
+
+ updateDownloadLink(ID_SCALAR_IF_REGULAR_DOWNLOAD, scalarIfRegular);
+ scalarIfRegular.addOrReplace(new ComponentFeedbackPanel(ID_FEEDBACK, fileUploadField));
+
+ addOrReplace(scalarIfRegular);
+
+ return scalarIfRegular;
+ }
+
+ @Override
+ protected Component addComponentForCompact() {
+ final MarkupContainer scalarIfCompact = new WebMarkupContainer(ID_SCALAR_IF_COMPACT);
+ updateDownloadLink(ID_SCALAR_IF_COMPACT_DOWNLOAD, scalarIfCompact);
+ addOrReplace(scalarIfCompact);
+ return scalarIfCompact;
+ }
+
+ protected void onBeforeRenderWhenViewMode() {
+ updateRegularFormComponents(InputFieldVisibility.NOT_VISIBLE);
+ }
+
+ protected void onBeforeRenderWhenDisabled(final String disableReason) {
+ updateRegularFormComponents(InputFieldVisibility.NOT_VISIBLE);
+ }
+
+ protected void onBeforeRenderWhenEnabled() {
+ updateRegularFormComponents(InputFieldVisibility.VISIBLE);
+ }
+
+
+ ///////////////////////////////////////////////
+ // helpers
+ ///////////////////////////////////////////////
+
+ private FileUploadField createFileUploadField(String componentId) {
+ final FileUploadField fileUploadField = new FileUploadField(componentId, new IModel<List<FileUpload>>() {
+
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void setObject(final List<FileUpload> fileUploads) {
+ if (fileUploads == null || fileUploads.isEmpty()) {
+ return;
+ }
+
+ final FileUpload fileUpload = fileUploads.get(0);
+ final String contentType = fileUpload.getContentType();
+ final String clientFileName = fileUpload.getClientFileName();
+ final byte[] bytes = fileUpload.getBytes();
+ final Blob blob = new Blob(clientFileName, contentType, bytes);
+
+ final ObjectAdapter adapter = getAdapterManager().adapterFor(blob);
+ getModel().setObject(adapter);
+ }
+
+ @Override
+ public void detach() {
+ }
+
+ @Override
+ public List<FileUpload> getObject() {
+ return null;
+ }
+
+ });
+ return fileUploadField;
+ }
+
+ private Blob getBlob(final ScalarModel model) {
+ ObjectAdapter adapter = model.getObject();
+ return adapter != null? (Blob) adapter.getObject(): null;
+ }
+
+ private enum InputFieldVisibility {
+ VISIBLE, NOT_VISIBLE;
+ }
+
+ private void updateRegularFormComponents(InputFieldVisibility visibility) {
+ MarkupContainer formComponentLabel = (MarkupContainer) getComponentForRegular();
+ formComponentLabel.get(ID_SCALAR_VALUE).setVisible(visibility == InputFieldVisibility.VISIBLE);
+ updateClearLink(visibility);
+ updateDownloadLink(ID_SCALAR_IF_REGULAR_DOWNLOAD, formComponentLabel);
+ }
+
+ private void updateClearLink(InputFieldVisibility visibility) {
+ final MarkupContainer formComponent = (MarkupContainer) getComponentForRegular();
+ formComponent.setOutputMarkupId(true); // enable ajax link
+
+ final AjaxLink<Void> ajaxLink = new AjaxLink<Void>(ID_SCALAR_IF_REGULAR_CLEAR){
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void onClick(AjaxRequestTarget target) {
+ setEnabled(false);
+ getModel().setObject(null);
+ target.add(formComponent);
+ }
+ };
+ ajaxLink.setOutputMarkupId(true);
+ formComponent.addOrReplace(ajaxLink);
+
+ final Blob blob = getBlob(getModel());
+ formComponent.get(ID_SCALAR_IF_REGULAR_CLEAR).setVisible(blob != null && visibility == InputFieldVisibility.VISIBLE);
+ }
+
+ private ResourceLink<?> updateDownloadLink(String downloadId, MarkupContainer container) {
+ final ResourceLink<?> resourceLink = createResourceLink(downloadId);
+ if(resourceLink != null) {
+ container.addOrReplace(resourceLink);
+ } else {
+ Components.permanentlyHide(container, downloadId);
+ }
+ return resourceLink;
+ }
+
+ private ResourceLink<?> createResourceLink(String id) {
+ final Blob blob = getBlob(getModel());
+ if(blob == null) {
+ return null;
+ }
+ final ByteArrayResource bar = new ByteArrayResource(blob.getMimeType().getBaseType(), blob.getBytes(), blob.getName());
+ return new ResourceLink<Object>(id, bar);
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/22cdbe0d/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobPanelFactory.java
----------------------------------------------------------------------
diff --git a/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobPanelFactory.java b/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobPanelFactory.java
new file mode 100644
index 0000000..633708c
--- /dev/null
+++ b/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobPanelFactory.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.viewer.wicket.ui.components.scalars.isisapplib;
+
+import org.apache.wicket.Component;
+
+import org.apache.isis.viewer.wicket.model.models.ScalarModel;
+import org.apache.isis.viewer.wicket.ui.ComponentFactory;
+import org.apache.isis.viewer.wicket.ui.components.scalars.ComponentFactoryScalarAbstract;
+
+/**
+ * {@link ComponentFactory} for {@link IsisColorPanel}.
+ */
+public class IsisBlobPanelFactory extends ComponentFactoryScalarAbstract {
+
+ private static final long serialVersionUID = 1L;
+
+ public IsisBlobPanelFactory() {
+ super(org.apache.isis.applib.value.Blob.class);
+ }
+
+ @Override
+ public Component createComponent(final String id, final ScalarModel scalarModel) {
+ return new IsisBlobPanel(id, scalarModel);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/22cdbe0d/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/links/LinksSelectorPanelAbstract.java
----------------------------------------------------------------------
diff --git a/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/links/LinksSelectorPanelAbstract.java b/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/links/LinksSelectorPanelAbstract.java
index 8e57402..fa1242b 100644
--- a/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/links/LinksSelectorPanelAbstract.java
+++ b/framework/viewer/wicket/wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/selector/links/LinksSelectorPanelAbstract.java
@@ -21,6 +21,12 @@ package org.apache.isis.viewer.wicket.ui.selector.links;
import java.util.List;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import com.google.common.collect.Collections2;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+
import org.apache.isis.applib.annotation.Resolve.Type;
import org.apache.isis.core.commons.lang.StringUtils;
import org.apache.isis.core.metamodel.facets.members.resolve.ResolveFacet;
@@ -44,12 +50,6 @@ import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
-import com.google.common.base.Predicate;
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-
public abstract class LinksSelectorPanelAbstract<T extends IModel<?>> extends PanelAbstract<T> {
private static final long serialVersionUID = 1L;
http://git-wip-us.apache.org/repos/asf/isis/blob/22cdbe0d/framework/viewer/wicket/wicket-viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java
----------------------------------------------------------------------
diff --git a/framework/viewer/wicket/wicket-viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java b/framework/viewer/wicket/wicket-viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java
index bb98fce..d6f2f0a 100644
--- a/framework/viewer/wicket/wicket-viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java
+++ b/framework/viewer/wicket/wicket-viewer/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/components/ComponentFactoryRegistrarDefault.java
@@ -46,6 +46,7 @@ import org.apache.isis.viewer.wicket.ui.components.entity.icontitle.EntityIconAn
import org.apache.isis.viewer.wicket.ui.components.entity.properties.EntityPropertiesPanelFactory;
import org.apache.isis.viewer.wicket.ui.components.entity.selector.dropdown.EntityDropDownSelectorPanelFactory;
import org.apache.isis.viewer.wicket.ui.components.entity.selector.links.EntityLinksSelectorPanelFactory;
+import org.apache.isis.viewer.wicket.ui.components.scalars.isisapplib.IsisBlobPanelFactory;
import org.apache.isis.viewer.wicket.ui.components.scalars.isisapplib.IsisColorPanelFactory;
import org.apache.isis.viewer.wicket.ui.components.scalars.isisapplib.IsisDatePanelFactory;
import org.apache.isis.viewer.wicket.ui.components.scalars.isisapplib.IsisDateTimePanelFactory;
@@ -220,6 +221,8 @@ public class ComponentFactoryRegistrarDefault implements ComponentFactoryRegistr
componentFactories.add(new IsisPercentagePanelFactory());
componentFactories.add(new IsisPasswordPanelFactory());
+ componentFactories.add(new IsisBlobPanelFactory());
+
componentFactories.add(new JavaMathBigIntegerPanelFactory());
componentFactories.add(new JavaMathBigDecimalPanelFactory());