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());
}