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 2013/05/06 17:40:50 UTC

[1/3] git commit: ISIS-396: BigDecimal honour @Column(scale=...) if JDO/Wicket

Updated Branches:
  refs/heads/master 5860833e5 -> e5e5a7286


ISIS-396: BigDecimal honour @Column(scale=...) if JDO/Wicket


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/fd5d5083
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/fd5d5083
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/fd5d5083

Branch: refs/heads/master
Commit: fd5d5083b016b892060861655fb1e29fe6172851
Parents: 5860833
Author: Dan Haywood <da...@apache.org>
Authored: Mon May 6 16:25:18 2013 +0100
Committer: Dan Haywood <da...@apache.org>
Committed: Mon May 6 16:25:18 2013 +0100

----------------------------------------------------------------------
 .../DataNucleusPersistenceMechanismInstaller.java  |    3 +
 ...DerivedFromJdoColumnAnnotationFacetFactory.java |   64 ++++++++
 .../BigDecimalFacetDerivedFromJdoColumn.java       |   51 ++++++
 .../prop/column/BigDecimalFacetFallback.java       |   49 ++++++
 ...vedFromJdoColumnAnnotationFacetFactoryTest.java |  119 +++++++++++++++
 .../column/SimpleObjectWithColumnAnnotations.java  |   98 ++++++++++++
 .../viewer/wicket/model/models/ScalarModel.java    |   44 ++++++
 .../scalars/ScalarPanelTextFieldAbstract.java      |    6 +-
 .../scalars/ScalarPanelTextFieldNumeric.java       |    1 -
 .../scalars/jdkmath/JavaMathBigDecimalPanel.java   |   68 ++++++++
 .../value/bigdecimal/BigDecimalValueFacet.java     |    4 +
 .../BigDecimalValueSemanticsProvider.java          |   16 ++-
 12 files changed, 520 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/fd5d5083/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java
----------------------------------------------------------------------
diff --git a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java
index 6f1a9aa..fcaacd8 100644
--- a/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java
+++ b/component/objectstore/jdo/jdo-datanucleus/src/main/java/org/apache/isis/objectstore/jdo/datanucleus/DataNucleusPersistenceMechanismInstaller.java
@@ -50,6 +50,7 @@ import org.apache.isis.objectstore.jdo.metamodel.facets.object.discriminator.Jdo
 import org.apache.isis.objectstore.jdo.metamodel.facets.object.embeddedonly.JdoEmbeddedOnlyAnnotationFacetFactory;
 import org.apache.isis.objectstore.jdo.metamodel.facets.object.persistencecapable.JdoPersistenceCapableAnnotationFacetFactory;
 import org.apache.isis.objectstore.jdo.metamodel.facets.object.query.JdoQueryAnnotationFacetFactory;
+import org.apache.isis.objectstore.jdo.metamodel.facets.prop.column.BigDecimalDerivedFromJdoColumnAnnotationFacetFactory;
 import org.apache.isis.objectstore.jdo.metamodel.facets.prop.primarykey.JdoPrimaryKeyAnnotationFacetFactory;
 import org.apache.isis.objectstore.jdo.metamodel.specloader.validator.JdoMetaModelValidator;
 
@@ -194,6 +195,8 @@ public class DataNucleusPersistenceMechanismInstaller extends PersistenceMechani
         
         programmingModel.addFactory(JdoQueryAnnotationFacetFactory.class);
         
+        programmingModel.addFactory(BigDecimalDerivedFromJdoColumnAnnotationFacetFactory.class);
+        
         programmingModel.addFactory(AuditableAnnotationInJdoApplibFacetFactory.class);
         programmingModel.addFactory(AuditableMarkerInterfaceInJdoApplibFacetFactory.class);
     }

http://git-wip-us.apache.org/repos/asf/isis/blob/fd5d5083/component/objectstore/jdo/jdo-metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/BigDecimalDerivedFromJdoColumnAnnotationFacetFactory.java
----------------------------------------------------------------------
diff --git a/component/objectstore/jdo/jdo-metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/BigDecimalDerivedFromJdoColumnAnnotationFacetFactory.java b/component/objectstore/jdo/jdo-metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/BigDecimalDerivedFromJdoColumnAnnotationFacetFactory.java
new file mode 100644
index 0000000..d425366
--- /dev/null
+++ b/component/objectstore/jdo/jdo-metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/BigDecimalDerivedFromJdoColumnAnnotationFacetFactory.java
@@ -0,0 +1,64 @@
+/*
+ *  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.objectstore.jdo.metamodel.facets.prop.column;
+
+import java.math.BigDecimal;
+
+import javax.jdo.annotations.Column;
+
+import org.apache.isis.core.metamodel.facetapi.FacetUtil;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.Annotations;
+import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.FacetedMethod;
+import org.apache.isis.core.progmodel.facets.value.bigdecimal.BigDecimalValueFacet;
+
+
+public class BigDecimalDerivedFromJdoColumnAnnotationFacetFactory extends FacetFactoryAbstract {
+
+    private static final int DEFAULT_LENGTH = BigDecimalFacetFallback.DEFAULT_LENGTH;
+    private static final int DEFAULT_SCALE = BigDecimalFacetFallback.DEFAULT_SCALE;
+
+    public BigDecimalDerivedFromJdoColumnAnnotationFacetFactory() {
+        super(FeatureType.PROPERTIES_ONLY);
+    }
+
+    @Override
+    public void process(final ProcessMethodContext processMethodContext) {
+        if(BigDecimal.class != processMethodContext.getMethod().getReturnType()) {
+            return;
+        }
+        
+        final BigDecimalValueFacet facet;
+        final FacetedMethod holder = processMethodContext.getFacetHolder();
+        
+        final Column annotation = Annotations.getAnnotation(processMethodContext.getMethod(), Column.class);
+        if (annotation == null) {
+            facet = new BigDecimalFacetFallback(holder);
+        } else {
+            facet = new BigDecimalFacetDerivedFromJdoColumn(holder, valueElseDefault(annotation.length(), DEFAULT_LENGTH), valueElseDefault(annotation.scale(), DEFAULT_SCALE));
+        }
+        FacetUtil.addFacet(facet);
+    }
+
+    Integer valueElseDefault(final int value, final int defaultValue) {
+        return value != -1? value: defaultValue;
+    }
+    
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/fd5d5083/component/objectstore/jdo/jdo-metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/BigDecimalFacetDerivedFromJdoColumn.java
----------------------------------------------------------------------
diff --git a/component/objectstore/jdo/jdo-metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/BigDecimalFacetDerivedFromJdoColumn.java b/component/objectstore/jdo/jdo-metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/BigDecimalFacetDerivedFromJdoColumn.java
new file mode 100644
index 0000000..9884ce3
--- /dev/null
+++ b/component/objectstore/jdo/jdo-metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/BigDecimalFacetDerivedFromJdoColumn.java
@@ -0,0 +1,51 @@
+/*
+ *  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.objectstore.jdo.metamodel.facets.prop.column;
+
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.progmodel.facets.value.bigdecimal.BigDecimalValueFacet;
+
+
+public class BigDecimalFacetDerivedFromJdoColumn extends FacetAbstract implements BigDecimalValueFacet {
+
+    private final Integer length;
+    private final Integer scale;
+
+    public static Class<? extends Facet> type() {
+        return BigDecimalValueFacet.class;
+    }
+
+    public BigDecimalFacetDerivedFromJdoColumn(final FacetHolder holder, final Integer length, final Integer scale) {
+        super(BigDecimalFacetDerivedFromJdoColumn.type(), holder, Derivation.NOT_DERIVED);
+        this.length = length;
+        this.scale = scale;
+    }
+
+    @Override
+    public Integer getLength() {
+        return length;
+    }
+
+    @Override
+    public Integer getScale() {
+        return scale;
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/fd5d5083/component/objectstore/jdo/jdo-metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/BigDecimalFacetFallback.java
----------------------------------------------------------------------
diff --git a/component/objectstore/jdo/jdo-metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/BigDecimalFacetFallback.java b/component/objectstore/jdo/jdo-metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/BigDecimalFacetFallback.java
new file mode 100644
index 0000000..f978730
--- /dev/null
+++ b/component/objectstore/jdo/jdo-metamodel/src/main/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/BigDecimalFacetFallback.java
@@ -0,0 +1,49 @@
+/*
+ *  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.objectstore.jdo.metamodel.facets.prop.column;
+
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.progmodel.facets.value.bigdecimal.BigDecimalValueFacet;
+
+
+public class BigDecimalFacetFallback extends FacetAbstract implements BigDecimalValueFacet {
+
+    static final int DEFAULT_LENGTH = 18;
+    static final int DEFAULT_SCALE = 2;
+
+    public static Class<? extends Facet> type() {
+        return BigDecimalValueFacet.class;
+    }
+
+    public BigDecimalFacetFallback(final FacetHolder holder) {
+        super(BigDecimalFacetFallback.type(), holder, Derivation.NOT_DERIVED);
+    }
+
+    @Override
+    public Integer getLength() {
+        return DEFAULT_LENGTH;
+    }
+
+    @Override
+    public Integer getScale() {
+        return DEFAULT_SCALE;
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/fd5d5083/component/objectstore/jdo/jdo-metamodel/src/test/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/BigDecimalDerivedFromJdoColumnAnnotationFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/component/objectstore/jdo/jdo-metamodel/src/test/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/BigDecimalDerivedFromJdoColumnAnnotationFacetFactoryTest.java b/component/objectstore/jdo/jdo-metamodel/src/test/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/BigDecimalDerivedFromJdoColumnAnnotationFacetFactoryTest.java
new file mode 100644
index 0000000..0d6f363
--- /dev/null
+++ b/component/objectstore/jdo/jdo-metamodel/src/test/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/BigDecimalDerivedFromJdoColumnAnnotationFacetFactoryTest.java
@@ -0,0 +1,119 @@
+/*
+ *  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.objectstore.jdo.metamodel.facets.prop.column;
+
+import static org.hamcrest.CoreMatchers.*;
+import static org.junit.Assert.assertThat;
+
+import java.lang.reflect.Method;
+import java.util.List;
+
+import javax.jdo.annotations.PrimaryKey;
+
+import org.junit.Assert;
+
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.FacetFactory;
+import org.apache.isis.core.metamodel.facets.mandatory.MandatoryFacet;
+import org.apache.isis.core.progmodel.facets.AbstractFacetFactoryTest;
+import org.apache.isis.core.progmodel.facets.members.disabled.DisabledFacet;
+import org.apache.isis.core.progmodel.facets.value.bigdecimal.BigDecimalValueFacet;
+
+public class BigDecimalDerivedFromJdoColumnAnnotationFacetFactoryTest extends AbstractFacetFactoryTest {
+
+    private BigDecimalDerivedFromJdoColumnAnnotationFacetFactory facetFactory;
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+
+        facetFactory = new BigDecimalDerivedFromJdoColumnAnnotationFacetFactory();
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        facetFactory = null;
+        super.tearDown();
+    }
+
+    public void testFeatureTypes() {
+        final List<FeatureType> featureTypes = facetFactory.getFeatureTypes();
+        assertFalse(contains(featureTypes, FeatureType.OBJECT));
+        assertTrue(contains(featureTypes, FeatureType.PROPERTY));
+        assertFalse(contains(featureTypes, FeatureType.COLLECTION));
+        assertFalse(contains(featureTypes, FeatureType.ACTION));
+        assertFalse(contains(featureTypes, FeatureType.ACTION_PARAMETER));
+    }
+
+    public void testAnnotationPickedUpOnProperty() throws Exception {
+        final Class<?> cls = SimpleObjectWithColumnAnnotations.class;
+        final Method method = cls.getMethod("getBigDecimalPropertyWithColumnAnnotation");
+        facetFactory.process(new FacetFactory.ProcessMethodContext(cls, method, methodRemover, facetedMethod));
+
+        final BigDecimalValueFacet facet = facetedMethod.getFacet(BigDecimalValueFacet.class);
+        assertNotNull(facet);
+        assertTrue(facet instanceof BigDecimalFacetDerivedFromJdoColumn);
+        assertThat(facet.getLength(), is(12));
+        assertThat(facet.getScale(), is(3));
+    }
+
+    public void testAnnotationDefaultsLengthIfMissing() throws Exception {
+        final Class<?> cls = SimpleObjectWithColumnAnnotations.class;
+        final Method method = cls.getMethod("getBigDecimalPropertyWithColumnAnnotationMissingLength");
+        facetFactory.process(new FacetFactory.ProcessMethodContext(cls, method, methodRemover, facetedMethod));
+
+        final BigDecimalValueFacet facet = facetedMethod.getFacet(BigDecimalValueFacet.class);
+        assertNotNull(facet);
+        assertTrue(facet instanceof BigDecimalFacetDerivedFromJdoColumn);
+        assertThat(facet.getLength(), is(18));
+    }
+
+    public void testAnnotationDefaultsScaleIfMissing() throws Exception {
+        final Class<?> cls = SimpleObjectWithColumnAnnotations.class;
+        final Method method = cls.getMethod("getBigDecimalPropertyWithColumnAnnotationMissingScale");
+        facetFactory.process(new FacetFactory.ProcessMethodContext(cls, method, methodRemover, facetedMethod));
+        
+        final BigDecimalValueFacet facet = facetedMethod.getFacet(BigDecimalValueFacet.class);
+        assertNotNull(facet);
+        assertTrue(facet instanceof BigDecimalFacetDerivedFromJdoColumn);
+        assertThat(facet.getScale(), is(2));
+    }
+    
+    public void testNoFacetIfPropertyTypeIsNotBigDecimal() throws Exception {
+        
+        final Class<?> cls = SimpleObjectWithColumnAnnotations.class;
+        final Method method = cls.getMethod("getStringPropertyWithColumnAnnotation");
+        facetFactory.process(new FacetFactory.ProcessMethodContext(cls, method, methodRemover, facetedMethod));
+
+        final Facet facet = facetedMethod.getFacet(BigDecimalValueFacet.class);
+        assertNull(facet);
+    }
+
+    public void testFallbackFacetIfPropertyIsNotAnnotated() throws Exception {
+        
+        final Class<?> cls = SimpleObjectWithColumnAnnotations.class;
+        final Method method = cls.getMethod("getBigDecimalPropertyWithoutColumnAnnotation");
+        facetFactory.process(new FacetFactory.ProcessMethodContext(cls, method, methodRemover, facetedMethod));
+        
+        final Facet facet = facetedMethod.getFacet(BigDecimalValueFacet.class);
+        assertNotNull(facet);
+        assertTrue(facet instanceof BigDecimalFacetFallback);
+    }
+}

http://git-wip-us.apache.org/repos/asf/isis/blob/fd5d5083/component/objectstore/jdo/jdo-metamodel/src/test/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/SimpleObjectWithColumnAnnotations.java
----------------------------------------------------------------------
diff --git a/component/objectstore/jdo/jdo-metamodel/src/test/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/SimpleObjectWithColumnAnnotations.java b/component/objectstore/jdo/jdo-metamodel/src/test/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/SimpleObjectWithColumnAnnotations.java
new file mode 100644
index 0000000..7949f38
--- /dev/null
+++ b/component/objectstore/jdo/jdo-metamodel/src/test/java/org/apache/isis/objectstore/jdo/metamodel/facets/prop/column/SimpleObjectWithColumnAnnotations.java
@@ -0,0 +1,98 @@
+/*
+ *  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.objectstore.jdo.metamodel.facets.prop.column;
+
+import java.math.BigDecimal;
+
+import javax.jdo.annotations.Column;
+
+import org.apache.isis.applib.annotation.MemberOrder;
+
+
+public class SimpleObjectWithColumnAnnotations {
+
+    // {{ BigDecimalPropertyWithColumnAnnotation (property)
+    private BigDecimal bigDecimalPropertyWithColumnAnnotation;
+
+    @Column(length=12,scale=3)
+    public BigDecimal getBigDecimalPropertyWithColumnAnnotation() {
+        return bigDecimalPropertyWithColumnAnnotation;
+    }
+
+    public void setBigDecimalPropertyWithColumnAnnotation(final BigDecimal val) {
+        this.bigDecimalPropertyWithColumnAnnotation = val;
+    }
+    // }}
+
+    // {{ BigDecimalPropertyWithColumnAnnotation (property)
+    private BigDecimal bigDecimalPropertyWithColumnAnnotationMissingLength;
+
+    @Column(scale=3)
+    public BigDecimal getBigDecimalPropertyWithColumnAnnotationMissingLength() {
+        return bigDecimalPropertyWithColumnAnnotationMissingLength;
+    }
+
+    public void setBigDecimalPropertyWithColumnAnnotationMissingLength(final BigDecimal val) {
+        this.bigDecimalPropertyWithColumnAnnotationMissingLength = val;
+    }
+    // }}
+
+    // {{ BigDecimalPropertyWithColumnAnnotationMissingScale (property)
+    private BigDecimal bigDecimalPropertyWithColumnAnnotationMissingScale;
+
+    @Column(length=12)
+    public BigDecimal getBigDecimalPropertyWithColumnAnnotationMissingScale() {
+        return bigDecimalPropertyWithColumnAnnotationMissingScale;
+    }
+
+    public void setBigDecimalPropertyWithColumnAnnotationMissingScale(final BigDecimal val) {
+        this.bigDecimalPropertyWithColumnAnnotationMissingScale = val;
+    }
+    // }}
+
+    // {{ StringPropertyWithColumnAnnotation (property)
+    private String stringPropertyWithColumnAnnotation;
+
+    @Column(length=12, scale=3)
+    public String getStringPropertyWithColumnAnnotation() {
+        return stringPropertyWithColumnAnnotation;
+    }
+
+    public void setStringPropertyWithColumnAnnotation(final String stringPropertyWithColumnAnnotation) {
+        this.stringPropertyWithColumnAnnotation = stringPropertyWithColumnAnnotation;
+    }
+    // }}
+
+    // {{ BigDecimalPropertyWithoutColumnAnnotation (property)
+    private BigDecimal bigDecimalPropertyWithoutColumnAnnotation;
+
+    public BigDecimal getBigDecimalPropertyWithoutColumnAnnotation() {
+        return bigDecimalPropertyWithoutColumnAnnotation;
+    }
+
+    public void setBigDecimalPropertyWithoutColumnAnnotation(final BigDecimal bigDecimalPropertyWithoutColumnAnnotation) {
+        this.bigDecimalPropertyWithoutColumnAnnotation = bigDecimalPropertyWithoutColumnAnnotation;
+    }
+    // }}
+
+
+
+
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/isis/blob/fd5d5083/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
index fda2799..8491aea 100644
--- a/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
+++ b/component/viewer/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ScalarModel.java
@@ -41,6 +41,7 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecId;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
 import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
+import org.apache.isis.core.progmodel.facets.value.bigdecimal.BigDecimalValueFacet;
 import org.apache.isis.core.runtime.system.context.IsisContext;
 import org.apache.isis.viewer.wicket.model.mementos.ActionParameterMemento;
 import org.apache.isis.viewer.wicket.model.mementos.ObjectAdapterMemento;
@@ -171,6 +172,22 @@ public class ScalarModel extends EntityModel {
                 final OneToOneAssociation property = propertyMemento.getProperty();
                 return property.getDescription();
             }
+
+            @Override
+            public Integer getLength(ScalarModel scalarModel) {
+                final PropertyMemento propertyMemento = scalarModel.getPropertyMemento();
+                final OneToOneAssociation property = propertyMemento.getProperty();
+                final BigDecimalValueFacet facet = property.getFacet(BigDecimalValueFacet.class);
+                return facet != null? facet.getLength(): null;
+            }
+            
+            @Override
+            public Integer getScale(ScalarModel scalarModel) {
+                final PropertyMemento propertyMemento = scalarModel.getPropertyMemento();
+                final OneToOneAssociation property = propertyMemento.getProperty();
+                final BigDecimalValueFacet facet = property.getFacet(BigDecimalValueFacet.class);
+                return facet != null? facet.getScale(): null;
+            }
         },
         PARAMETER {
             @Override
@@ -267,6 +284,22 @@ public class ScalarModel extends EntityModel {
                 final ObjectActionParameter actionParameter = parameterMemento.getActionParameter();
                 return actionParameter.getDescription();
             }
+
+            @Override
+            public Integer getLength(ScalarModel scalarModel) {
+                final ActionParameterMemento parameterMemento = scalarModel.getParameterMemento();
+                final ObjectActionParameter actionParameter = parameterMemento.getActionParameter();
+                final BigDecimalValueFacet facet = actionParameter.getFacet(BigDecimalValueFacet.class);
+                return facet != null? facet.getLength(): null;
+            }
+            
+            @Override
+            public Integer getScale(ScalarModel scalarModel) {
+                final ActionParameterMemento parameterMemento = scalarModel.getParameterMemento();
+                final ObjectActionParameter actionParameter = parameterMemento.getActionParameter();
+                final BigDecimalValueFacet facet = actionParameter.getFacet(BigDecimalValueFacet.class);
+                return facet != null? facet.getScale(): null;
+            }
         };
 
         private static List<ObjectAdapter> choicesAsList(final ObjectAdapter[] choices) {
@@ -307,6 +340,9 @@ public class ScalarModel extends EntityModel {
         public abstract String getDescribedAs(ScalarModel scalarModel);
 
         public abstract boolean hasChoices(ScalarModel scalarModel);
+
+        public abstract Integer getLength(ScalarModel scalarModel);
+        public abstract Integer getScale(ScalarModel scalarModel);
     }
 
     private final Kind kind;
@@ -486,4 +522,12 @@ public class ScalarModel extends EntityModel {
         return kind.hasChoices(this);
     }
 
+    public Integer getScale() {
+        return kind.getScale(this);
+    }
+
+    public int getLength() {
+        return kind.getLength(this);
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/fd5d5083/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
index d6b3932..eb8c79e 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldAbstract.java
@@ -72,7 +72,11 @@ public abstract class ScalarPanelTextFieldAbstract<T extends Serializable> exten
     }
 
     protected TextField<T> createTextField(final String id) {
-        return new TextField<T>(id, new TextFieldValueModel<T>(this), cls);
+        return new TextField<T>(id, newTextFieldValueModel(), cls);
+    }
+
+    protected TextFieldValueModel<T> newTextFieldValueModel() {
+        return new TextFieldValueModel<T>(this);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/isis/blob/fd5d5083/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java
index a5535d4..9ce5f9e 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/ScalarPanelTextFieldNumeric.java
@@ -23,7 +23,6 @@ import java.io.Serializable;
 
 import org.apache.wicket.Component;
 import org.apache.wicket.markup.html.form.AbstractTextComponent;
-import org.apache.wicket.markup.html.form.TextField;
 import org.apache.wicket.model.IModel;
 
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;

http://git-wip-us.apache.org/repos/asf/isis/blob/fd5d5083/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.java
----------------------------------------------------------------------
diff --git a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.java b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.java
index 96e9779..2380da2 100644
--- a/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.java
+++ b/component/viewer/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/jdkmath/JavaMathBigDecimalPanel.java
@@ -20,6 +20,15 @@
 package org.apache.isis.viewer.wicket.ui.components.scalars.jdkmath;
 
 import java.math.BigDecimal;
+import java.math.MathContext;
+import java.math.RoundingMode;
+import java.text.DecimalFormat;
+import java.text.NumberFormat;
+import java.text.ParseException;
+import java.util.Locale;
+
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.util.convert.IConverter;
 
 import org.apache.isis.viewer.wicket.model.models.ScalarModel;
 import org.apache.isis.viewer.wicket.ui.components.scalars.ScalarPanelTextFieldNumeric;
@@ -34,5 +43,64 @@ public class JavaMathBigDecimalPanel extends ScalarPanelTextFieldNumeric<BigDeci
     public JavaMathBigDecimalPanel(final String id, final ScalarModel scalarModel) {
         super(id, scalarModel, BigDecimal.class);
     }
+ 
+    @Override
+    protected void addSemantics() {
+        super.addSemantics();
+    }
+    
+    protected TextField<BigDecimal> createTextField(final String id) {
+        
+        final ScalarModel model = getModel();
+        
+        final TextField<BigDecimal> textField = new TextField<BigDecimal>(id, newTextFieldValueModel(), cls) {
+
+            private static final long serialVersionUID = 1L;
+
+            @SuppressWarnings("unchecked")
+            @Override
+            public <C> IConverter<C> getConverter(Class<C> type) {
+
+                Integer scale = model.getScale();
+                final MathContext mathContext = new MathContext(scale+1, RoundingMode.HALF_UP);
+                
+//                final NumberFormat numberFormat = NumberFormat.getInstance();
+//                numberFormat.setMinimumFractionDigits(scale);
+//                numberFormat.setMaximumFractionDigits(scale);
+//                numberFormat.setMaximumIntegerDigits(model.getLength());
+
+                if(type == BigDecimal.class) {
+                    return (IConverter<C>) new IConverter<BigDecimal>() {
+
+                        private static final long serialVersionUID = 1L;
+
+                        @Override
+                        public BigDecimal convertToObject(String value, Locale locale) {
+                            try {
+                                return new BigDecimal(value, mathContext);
+//                                final Number parsed = numberFormat.parse(value);
+//                                return (BigDecimal) parsed;
+                            } catch (Exception e) {
+                                return null;
+                            }
+                        }
+
+                        @Override
+                        public String convertToString(BigDecimal value, Locale locale) {
+                            //return numberFormat.format(value);
+                            return value.toPlainString();
+                        }}; 
+                } else {
+                    return super.getConverter(type);
+                }
+            }
+        };
+        
+        
+        return textField;
+    }
+    
+    
+
 
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/fd5d5083/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/value/bigdecimal/BigDecimalValueFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/value/bigdecimal/BigDecimalValueFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/value/bigdecimal/BigDecimalValueFacet.java
index 1d8fa10..710d4c1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/value/bigdecimal/BigDecimalValueFacet.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/value/bigdecimal/BigDecimalValueFacet.java
@@ -23,4 +23,8 @@ import org.apache.isis.core.metamodel.facetapi.Facet;
 
 public interface BigDecimalValueFacet extends Facet {
 
+    Integer getLength();
+    
+    Integer getScale();
+
 }

http://git-wip-us.apache.org/repos/asf/isis/blob/fd5d5083/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/value/bigdecimal/BigDecimalValueSemanticsProvider.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/value/bigdecimal/BigDecimalValueSemanticsProvider.java b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/value/bigdecimal/BigDecimalValueSemanticsProvider.java
index 1cd3f63..12372f4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/value/bigdecimal/BigDecimalValueSemanticsProvider.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/progmodel/facets/value/bigdecimal/BigDecimalValueSemanticsProvider.java
@@ -60,13 +60,26 @@ public class BigDecimalValueSemanticsProvider extends ValueSemanticsProviderAndF
     }
 
     public void setLocale(final Locale l) {
-        // TODO Auto-generated method stub
 
     }
 
     // //////////////////////////////////////////////////////////////////
     // Parser
     // //////////////////////////////////////////////////////////////////
+    
+    @Override
+    public Integer getLength() {
+        return 18;
+    }
+
+    @Override
+    public Integer getScale() {
+        return 2;
+    }
+
+    // //////////////////////////////////////////////////////////////////
+    // Parser
+    // //////////////////////////////////////////////////////////////////
 
     @Override
     protected BigDecimal doParse(final Object context, final String entry) {
@@ -120,4 +133,5 @@ public class BigDecimalValueSemanticsProvider extends ValueSemanticsProviderAndF
         return "BigDecimalValueSemanticsProvider: " + format;
     }
 
+
 }


[2/3] git commit: ISIS-397: AuditingService$Stderr...

Posted by da...@apache.org.
ISIS-397: AuditingService$Stderr...

... instead of AuditingService$Stdout


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/ef20beaf
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/ef20beaf
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/ef20beaf

Branch: refs/heads/master
Commit: ef20beaf14063812a76bf86884be06613421dfec
Parents: fd5d508
Author: Dan Haywood <da...@apache.org>
Authored: Mon May 6 16:26:45 2013 +0100
Committer: Dan Haywood <da...@apache.org>
Committed: Mon May 6 16:26:45 2013 +0100

----------------------------------------------------------------------
 .../applib/services/audit/AuditingService.java     |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/ef20beaf/core/applib/src/main/java/org/apache/isis/applib/services/audit/AuditingService.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/audit/AuditingService.java b/core/applib/src/main/java/org/apache/isis/applib/services/audit/AuditingService.java
index 4726fa6..0675a3f 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/audit/AuditingService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/audit/AuditingService.java
@@ -26,12 +26,12 @@ public interface AuditingService {
     public void audit(String user, long currentTimestampEpoch, String objectType, String identifier, String preValue, String postValue);
     
     
-    public static class Stdout implements AuditingService {
+    public static class Stderr implements AuditingService {
 
         @Hidden
         public void audit(String user, long currentTimestampEpoch, String objectType, String identifier, String preValue, String postValue) {
             String auditMessage = objectType + ":" + identifier + " by " + user + ": " + preValue + " -> " + postValue;
-            System.out.println(auditMessage);
+            System.err.println(auditMessage);
         }
     }
 


[3/3] git commit: ISIS-398: extend Clock interface for Joda...

Posted by da...@apache.org.
ISIS-398: extend Clock interface for Joda...

... to return Joda's LocalDate or LocalDateTime


Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/e5e5a728
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/e5e5a728
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/e5e5a728

Branch: refs/heads/master
Commit: e5e5a72867c5a6fb20f6eb008fcf4423afeca68a
Parents: ef20bea
Author: Dan Haywood <da...@apache.org>
Authored: Mon May 6 16:28:35 2013 +0100
Committer: Dan Haywood <da...@apache.org>
Committed: Mon May 6 16:28:35 2013 +0100

----------------------------------------------------------------------
 .../java/org/apache/isis/applib/clock/Clock.java   |   15 +++++++++++++++
 1 files changed, 15 insertions(+), 0 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/isis/blob/e5e5a728/core/applib/src/main/java/org/apache/isis/applib/clock/Clock.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/clock/Clock.java b/core/applib/src/main/java/org/apache/isis/applib/clock/Clock.java
index 19a880a..6aaad8d 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/clock/Clock.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/clock/Clock.java
@@ -23,6 +23,8 @@ import java.util.Calendar;
 import java.util.Date;
 
 import org.joda.time.DateTime;
+import org.joda.time.LocalDate;
+import org.joda.time.LocalDateTime;
 
 import org.apache.isis.applib.ApplicationException;
 import org.apache.isis.applib.Defaults;
@@ -104,6 +106,19 @@ public abstract class Clock {
         return new Date(getTime());
     }
 
+    public static LocalDate getTimeAsLocalDate() {
+        return new LocalDate(getTime(), Defaults.getTimeZone());
+    }
+
+    public static LocalDateTime getTimeAsLocalDateTime() {
+        return new LocalDateTime(getTime(), Defaults.getTimeZone());
+    }
+
+    /**
+     * Returns the {@link #getTime() time} as a Joda {@link DateTime},
+     * using the {@link Defaults#getTimeZone() timezone} as
+     * {@link Defaults#setTimeZone(org.joda.time.DateTimeZone) currently set}.
+     */
     public static DateTime getTimeAsDateTime() {
         return new DateTime(getTime(), Defaults.getTimeZone());
     }