You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2018/03/21 13:28:35 UTC
[1/4] cayenne git commit: CAY-2411 Wrong resolution of ExtendedType
with ValueObjectType for inherited class (cherry picked from commit fd0d06e)
Repository: cayenne
Updated Branches:
refs/heads/STABLE-4.0 4cd249778 -> ba750c5b2
CAY-2411 Wrong resolution of ExtendedType with ValueObjectType for inherited class
(cherry picked from commit fd0d06e)
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/a16d7c43
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/a16d7c43
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/a16d7c43
Branch: refs/heads/STABLE-4.0
Commit: a16d7c435f86cb25c987d054704d8210ff855ae6
Parents: 4cd2497
Author: Nikita Timofeev <st...@gmail.com>
Authored: Tue Feb 27 16:05:47 2018 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Tue Feb 27 17:14:47 2018 +0300
----------------------------------------------------------------------
RELEASE-NOTES.txt | 1 +
.../types/DefaultValueObjectTypeRegistry.java | 45 ----------------
.../cayenne/access/types/ExtendedTypeMap.java | 3 --
.../access/types/SubclassTypeFactory.java | 3 ++
.../DefaultValueObjectTypeRegistryTest.java | 8 +--
.../access/types/ExtendedTypeMapEnumsTest.java | 11 ++--
.../access/types/ExtendedTypeMapTest.java | 2 +-
.../types/ValueObjectTypeFactoryTest.java | 55 +++++++++++++++++++-
8 files changed, 68 insertions(+), 60 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/a16d7c43/RELEASE-NOTES.txt
----------------------------------------------------------------------
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 030b5f1..49863ba 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -27,6 +27,7 @@ CAY-2389 DbEntity qualifier with DbPath expression translates into wrong SQL
CAY-2392 Modeler: Unable to remove DataNode
CAY-2401 Modeler: NPE in ObjEntity sync action
CAY-2405 Broken prefetch of entity with inheritance and attribute with custom java type
+CAY-2411 Wrong resolution of ExtendedType with ValueObjectType for inherited class
----------------------------------
Release: 4.0.B2
http://git-wip-us.apache.org/repos/asf/cayenne/blob/a16d7c43/cayenne-server/src/main/java/org/apache/cayenne/access/types/DefaultValueObjectTypeRegistry.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/DefaultValueObjectTypeRegistry.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/DefaultValueObjectTypeRegistry.java
index 3dda771..7943ee8 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/DefaultValueObjectTypeRegistry.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/DefaultValueObjectTypeRegistry.java
@@ -52,53 +52,8 @@ public class DefaultValueObjectTypeRegistry implements ValueObjectTypeRegistry {
public <T> ValueObjectType<T, ?> getValueType(Class<? extends T> valueClass) {
ValueObjectType type = typeCache.get(valueClass.getName());
if(type == null) {
- type = findBySuperclasses(valueClass);
- } else if(type == NULL_DUMMY) {
return null;
}
return type;
}
-
- protected ValueObjectType<?, ?> findBySuperclasses(final Class<?> baseClass) {
- ValueObjectType<?,?> type = null;
- Class<?> searchClass = baseClass.getSuperclass();
-
- while(searchClass != null && !searchClass.equals(Object.class)) {
- type = typeCache.get(searchClass.getName());
- if(type != null) {
- // cache it for faster search later
- typeCache.put(baseClass.getName(), type);
- break;
- }
- searchClass = searchClass.getSuperclass();
- }
- // as well cache null result
- if(type == null) {
- typeCache.put(baseClass.getName(), NULL_DUMMY);
- }
- return type;
- }
-
- private static final ValueObjectType<?, ?> NULL_DUMMY = new ValueObjectType() {
- @Override
- public Class<?> getTargetType() {
- return null;
- }
- @Override
- public Class<?> getValueType() {
- return null;
- }
- @Override
- public Object toJavaObject(Object value) {
- return null;
- }
- @Override
- public Object fromJavaObject(Object object) {
- return null;
- }
- @Override
- public String toCacheKey(Object object) {
- return null;
- }
- };
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/a16d7c43/cayenne-server/src/main/java/org/apache/cayenne/access/types/ExtendedTypeMap.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ExtendedTypeMap.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ExtendedTypeMap.java
index 8d3d31b..3caf3f8 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/ExtendedTypeMap.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/ExtendedTypeMap.java
@@ -128,9 +128,6 @@ public class ExtendedTypeMap {
*/
public void registerType(ExtendedType type) {
typeMap.put(type.getClassName(), type);
-
- // factory to handle subclasses of type.className
- addFactory(new SubclassTypeFactory(type));
}
/**
http://git-wip-us.apache.org/repos/asf/cayenne/blob/a16d7c43/cayenne-server/src/main/java/org/apache/cayenne/access/types/SubclassTypeFactory.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/types/SubclassTypeFactory.java b/cayenne-server/src/main/java/org/apache/cayenne/access/types/SubclassTypeFactory.java
index 6938759..182d0c3 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/types/SubclassTypeFactory.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/types/SubclassTypeFactory.java
@@ -25,6 +25,9 @@ import org.apache.cayenne.util.Util;
* of the className in the {@link ExtendedType}.
*
* @since 3.0
+ * @deprecated since 4.1 it is unused, as this factory is faulty assuming that
+ * we can freely interchange base class and it's subclasses.
+ *
*/
class SubclassTypeFactory implements ExtendedTypeFactory {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/a16d7c43/cayenne-server/src/test/java/org/apache/cayenne/access/types/DefaultValueObjectTypeRegistryTest.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/types/DefaultValueObjectTypeRegistryTest.java b/cayenne-server/src/test/java/org/apache/cayenne/access/types/DefaultValueObjectTypeRegistryTest.java
index 28c7467..d761f34 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/types/DefaultValueObjectTypeRegistryTest.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/types/DefaultValueObjectTypeRegistryTest.java
@@ -69,14 +69,14 @@ public class DefaultValueObjectTypeRegistryTest {
assertSame(valueObjectType1, valueObjectType);
valueObjectType = registry.getValueType(Float.class);
- assertSame(valueObjectType2, valueObjectType);
+ assertNull(valueObjectType);
valueObjectType = registry.getValueType(String.class);
assertNull(valueObjectType);
- assertEquals(4, registry.typeCache.size());
- assertTrue(registry.typeCache.containsKey(String.class.getName()));
- assertTrue(registry.typeCache.containsKey(Float.class.getName()));
+ assertEquals(2, registry.typeCache.size());
+ assertFalse(registry.typeCache.containsKey(String.class.getName()));
+ assertFalse(registry.typeCache.containsKey(Float.class.getName()));
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cayenne/blob/a16d7c43/cayenne-server/src/test/java/org/apache/cayenne/access/types/ExtendedTypeMapEnumsTest.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/types/ExtendedTypeMapEnumsTest.java b/cayenne-server/src/test/java/org/apache/cayenne/access/types/ExtendedTypeMapEnumsTest.java
index 21ac50b..b9e5b73 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/types/ExtendedTypeMapEnumsTest.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/types/ExtendedTypeMapEnumsTest.java
@@ -90,17 +90,16 @@ public class ExtendedTypeMapEnumsTest {
ExtendedType byType = map.getRegisteredType(InnerEnum.class);
- // this and subsequent tests verify that no memory leak occurs per
- // CAY-2066
- assertEquals(1, map.extendedTypeFactories.size());
+ // this and subsequent tests verify that no memory leak occurs per CAY-2066
+ assertEquals(0, map.extendedTypeFactories.size());
assertSame(byType, map.getRegisteredType(InnerEnum.class));
- assertEquals(1, map.extendedTypeFactories.size());
+ assertEquals(0, map.extendedTypeFactories.size());
assertSame(byType, map.getRegisteredType(InnerEnumHolder.class.getName() + "$InnerEnum"));
- assertEquals(1, map.extendedTypeFactories.size());
+ assertEquals(0, map.extendedTypeFactories.size());
assertSame(byType, map.getRegisteredType(InnerEnumHolder.class.getName() + ".InnerEnum"));
- assertEquals(1, map.extendedTypeFactories.size());
+ assertEquals(0, map.extendedTypeFactories.size());
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/a16d7c43/cayenne-server/src/test/java/org/apache/cayenne/access/types/ExtendedTypeMapTest.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/types/ExtendedTypeMapTest.java b/cayenne-server/src/test/java/org/apache/cayenne/access/types/ExtendedTypeMapTest.java
index fc68377..769e715 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/types/ExtendedTypeMapTest.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/types/ExtendedTypeMapTest.java
@@ -55,7 +55,7 @@ public class ExtendedTypeMapTest {
// List
map.registerType(tstType1);
assertSame(tstType1, map.getRegisteredType(List.class));
- assertSame(tstType1, map.getRegisteredType(ArrayList.class));
+ assertNotSame(tstType1, map.getRegisteredType(ArrayList.class));
map = new ExtendedTypeMap();
http://git-wip-us.apache.org/repos/asf/cayenne/blob/a16d7c43/cayenne-server/src/test/java/org/apache/cayenne/access/types/ValueObjectTypeFactoryTest.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/types/ValueObjectTypeFactoryTest.java b/cayenne-server/src/test/java/org/apache/cayenne/access/types/ValueObjectTypeFactoryTest.java
index 293cf5f..8151a64 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/types/ValueObjectTypeFactoryTest.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/types/ValueObjectTypeFactoryTest.java
@@ -22,18 +22,21 @@ package org.apache.cayenne.access.types;
import org.junit.Before;
import org.junit.Test;
+import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
+import static org.hamcrest.CoreMatchers.instanceOf;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class ValueObjectTypeFactoryTest {
- ExtendedType tstType1, tstType2, tstType3, tstType4;
+ ExtendedType tstType1, tstType2, tstType3, tstType4, tstType5;
ValueObjectTypeFactory factory;
@@ -44,6 +47,7 @@ public class ValueObjectTypeFactoryTest {
list.add(createMockValueType(String.class, String.class));
list.add(createMockValueType(int.class, int.class));
list.add(createMockValueType(String[].class, String[].class));
+ list.add(createMockValueType(TestClass.class, BigDecimal.class));
DefaultValueObjectTypeRegistry registry = new DefaultValueObjectTypeRegistry(list);
@@ -63,6 +67,9 @@ public class ValueObjectTypeFactoryTest {
when(tstType4.getClassName()).thenReturn(String[].class.getCanonicalName());
extendedTypeMap.registerType(tstType4);
+ tstType5 = new MockExtendedType(BigDecimal.class);
+ extendedTypeMap.registerType(tstType5);
+
factory = new ValueObjectTypeFactory(extendedTypeMap,registry);
}
@@ -100,4 +107,50 @@ public class ValueObjectTypeFactoryTest {
assertNotNull(converter4);
assertSame(tstType4, converter4.extendedType);
}
+
+ @Test
+ public void testInheritantType() {
+ ValueObjectTypeFactory.ExtendedTypeConverter converter5 = (ValueObjectTypeFactory.ExtendedTypeConverter) factory.getType(TestClass.class);
+ assertNotNull(converter5);
+ assertSame(tstType5, converter5.extendedType);
+ }
+
+ /**
+ * Test case for CAY-2411
+ */
+ @Test
+ public void testInheritantValueTypeOverExtendedType() {
+ // setup
+ ExtendedTypeMap map;
+ BigDecimalType bigDecimalType = new BigDecimalType();
+ ValueObjectType valueObjectType;
+ {
+ map = new ExtendedTypeMap();
+ map.registerType(bigDecimalType);
+
+ List<ValueObjectType<?, ?>> list = new ArrayList<>();
+ valueObjectType = mock(ValueObjectType.class);
+ when(valueObjectType.getValueType()).thenReturn(TestClass.class);
+ when(valueObjectType.getTargetType()).thenReturn(BigDecimal.class);
+ list.add(valueObjectType);
+
+ DefaultValueObjectTypeRegistry registry = new DefaultValueObjectTypeRegistry(list);
+ map.addFactory(new ValueObjectTypeFactory(map, registry));
+ }
+
+ // test
+ ExtendedType type1 = map.getRegisteredType(BigDecimal.class);
+ assertSame(bigDecimalType, type1);
+
+ ExtendedType type2 = map.getRegisteredType(TestClass.class);
+ assertThat(type2, instanceOf(ValueObjectTypeFactory.ExtendedTypeConverter.class));
+ assertSame(valueObjectType, ((ValueObjectTypeFactory.ExtendedTypeConverter)type2).valueObjectType);
+ }
+
+ private class TestClass extends BigDecimal {
+
+ public TestClass(long val) {
+ super(val);
+ }
+ }
}
[3/4] cayenne git commit: Fix NPE
Posted by nt...@apache.org.
Fix NPE
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/237c1421
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/237c1421
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/237c1421
Branch: refs/heads/STABLE-4.0
Commit: 237c142102f32ed805cf52d909054f05a1410958
Parents: 26330d4
Author: Nikita Timofeev <st...@gmail.com>
Authored: Wed Mar 21 16:12:03 2018 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Wed Mar 21 16:12:03 2018 +0300
----------------------------------------------------------------------
.../cayenne/access/translator/select/DefaultSelectTranslator.java | 3 +++
1 file changed, 3 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/237c1421/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/DefaultSelectTranslator.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/DefaultSelectTranslator.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/DefaultSelectTranslator.java
index d933a39..7297fc6 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/DefaultSelectTranslator.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/DefaultSelectTranslator.java
@@ -958,6 +958,9 @@ public class DefaultSelectTranslator extends QueryAssembler implements SelectTra
}
public boolean haveJointNode(PrefetchTreeNode prefetchTree) {
+ if(prefetchTree == null) {
+ return false;
+ }
haveJointNode = false;
prefetchTree.traverse(this);
return haveJointNode;
[4/4] cayenne git commit: CAY-2414 Modeler: new icon design
Posted by nt...@apache.org.
CAY-2414 Modeler: new icon design
(cherry picked from commit c55e46f)
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/ba750c5b
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/ba750c5b
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/ba750c5b
Branch: refs/heads/STABLE-4.0
Commit: ba750c5b2b464a74c24a160e7c9bd470c8d074a5
Parents: 237c142
Author: Nikita Timofeev <st...@gmail.com>
Authored: Wed Mar 21 16:12:11 2018 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Wed Mar 21 16:12:11 2018 +0300
----------------------------------------------------------------------
RELEASE-NOTES.txt | 5 +++
.../resources/assemblies/assembly-windows.xml | 2 +-
.../generic/GenericPlatformInitializer.java | 28 ++++++++------
.../modeler/osx/OSXPlatformInitializer.java | 20 +++++++++-
.../cayenne/modeler/CayenneModelerFrame.java | 2 +-
.../modeler/action/CreateObjEntityAction.java | 3 +-
.../action/CreateObjEntityFromDbAction.java | 37 +++++++++++++++++++
.../modeler/action/DefaultActionManager.java | 33 +++++++++--------
.../modeler/action/ImportEOModelAction.java | 6 ++-
.../modeler/editor/ObjEntityAttributePanel.java | 4 --
.../editor/ObjEntityRelationshipPanel.java | 1 -
.../DbEntityAttributeRelationshipTab.java | 4 +-
.../modeler/editor/dbentity/DbEntityTab.java | 9 ++---
.../cayenne/modeler/util/CayenneAction.java | 21 -----------
.../cayenne/modeler/util/CellRenderers.java | 33 ++++++-----------
.../cayenne/swing/ImageRendererColumn.java | 3 --
.../components/image/FilteredIconFactory.java | 26 ++++++-------
.../cayenne/swing/control/FileMenuItem.java | 1 -
.../cayenne/modeler/images/CayenneModeler.jpg | Bin 23590 -> 0 bytes
.../cayenne/modeler/images/CayenneModeler.png | Bin 0 -> 5321 bytes
.../cayenne/modeler/images/icon-attribute.png | Bin 293 -> 304 bytes
.../apache/cayenne/modeler/images/icon-copy.png | Bin 181 -> 203 bytes
.../modeler/images/icon-create-method.png | Bin 479 -> 483 bytes
.../apache/cayenne/modeler/images/icon-cut.png | Bin 391 -> 428 bytes
.../cayenne/modeler/images/icon-datamap.png | Bin 411 -> 529 bytes
.../cayenne/modeler/images/icon-dbentity.png | Bin 142 -> 257 bytes
.../apache/cayenne/modeler/images/icon-dom.png | Bin 421 -> 495 bytes
.../apache/cayenne/modeler/images/icon-edit.png | Bin 340 -> 343 bytes
.../cayenne/modeler/images/icon-embeddable.png | Bin 440 -> 549 bytes
.../cayenne/modeler/images/icon-eomodel.png | Bin 0 -> 655 bytes
.../cayenne/modeler/images/icon-error.png | Bin 418 -> 423 bytes
.../cayenne/modeler/images/icon-filter.png | Bin 296 -> 263 bytes
.../cayenne/modeler/images/icon-gen_java.png | Bin 349 -> 335 bytes
.../apache/cayenne/modeler/images/icon-info.png | Bin 702 -> 343 bytes
.../cayenne/modeler/images/icon-inheritance.png | Bin 473 -> 626 bytes
.../cayenne/modeler/images/icon-move_down.png | Bin 304 -> 316 bytes
.../cayenne/modeler/images/icon-move_up.png | Bin 558 -> 621 bytes
.../apache/cayenne/modeler/images/icon-new.png | Bin 154 -> 169 bytes
.../modeler/images/icon-new_embeddable.png | Bin 521 -> 549 bytes
.../modeler/images/icon-new_objentity.png | Bin 563 -> 585 bytes
.../cayenne/modeler/images/icon-new_query.png | Bin 466 -> 447 bytes
.../apache/cayenne/modeler/images/icon-node.png | Bin 350 -> 384 bytes
.../cayenne/modeler/images/icon-objentity.png | Bin 481 -> 573 bytes
.../apache/cayenne/modeler/images/icon-open.png | Bin 317 -> 208 bytes
.../cayenne/modeler/images/icon-paste.png | Bin 244 -> 273 bytes
.../apache/cayenne/modeler/images/icon-plus.png | Bin 129 -> 126 bytes
.../cayenne/modeler/images/icon-query.png | Bin 380 -> 447 bytes
.../apache/cayenne/modeler/images/icon-redo.png | Bin 525 -> 435 bytes
.../cayenne/modeler/images/icon-refresh.png | Bin 506 -> 547 bytes
.../modeler/images/icon-relationship.png | Bin 347 -> 384 bytes
.../modeler/images/icon-save-as-image.png | Bin 217 -> 242 bytes
.../apache/cayenne/modeler/images/icon-save.png | Bin 216 -> 224 bytes
.../modeler/images/icon-stored-procedure.png | Bin 389 -> 352 bytes
.../apache/cayenne/modeler/images/icon-sync.png | Bin 280 -> 245 bytes
.../cayenne/modeler/images/icon-trash.png | Bin 164 -> 178 bytes
.../modeler/images/icon-tree-collapse.png | Bin 252 -> 223 bytes
.../apache/cayenne/modeler/images/icon-undo.png | Bin 511 -> 429 bytes
.../cayenne/modeler/images/icon-zoom-in.png | Bin 409 -> 462 bytes
.../cayenne/modeler/images/icon-zoom-out.png | Bin 403 -> 466 bytes
59 files changed, 133 insertions(+), 105 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/RELEASE-NOTES.txt
----------------------------------------------------------------------
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index 49863ba..ef60cbc 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -11,6 +11,11 @@ https://issues.apache.org/jira/browse/CAY
Release: 4.0.B3
Date:
----------------------------------
+
+Changes/New Features:
+
+CAY-2414 Modeler: new icon design
+
Bug Fixes:
CAY-2253 Cayenne JDK9 compatibility
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/assembly/src/main/resources/assemblies/assembly-windows.xml
----------------------------------------------------------------------
diff --git a/assembly/src/main/resources/assemblies/assembly-windows.xml b/assembly/src/main/resources/assemblies/assembly-windows.xml
index bd81d33..d73f9b2 100644
--- a/assembly/src/main/resources/assemblies/assembly-windows.xml
+++ b/assembly/src/main/resources/assemblies/assembly-windows.xml
@@ -54,7 +54,7 @@
</fileSet>
<fileSet>
<directory>../</directory>
- <outputDirectory>/</outputDirectory>
+ <outputDirectory>.</outputDirectory>
<includes>
<include>RELEASE-NOTES.txt</include>
<include>UPGRADE.txt</include>
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler-generic-ext/src/main/java/org/apache/cayenne/modeler/generic/GenericPlatformInitializer.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler-generic-ext/src/main/java/org/apache/cayenne/modeler/generic/GenericPlatformInitializer.java b/modeler/cayenne-modeler-generic-ext/src/main/java/org/apache/cayenne/modeler/generic/GenericPlatformInitializer.java
index 3dfc4af..d2dc486 100644
--- a/modeler/cayenne-modeler-generic-ext/src/main/java/org/apache/cayenne/modeler/generic/GenericPlatformInitializer.java
+++ b/modeler/cayenne-modeler-generic-ext/src/main/java/org/apache/cayenne/modeler/generic/GenericPlatformInitializer.java
@@ -64,18 +64,24 @@ public class GenericPlatformInitializer implements PlatformInitializer {
}
private void overrideUIDefaults() {
- UIManager.put("ButtonUI", GenericButtonUI.class.getName());
- UIManager.put("HiResGrayFilterEnabled", Boolean.TRUE);
- UIManager.put("Tree.expandedIcon", ModelerUtil.buildIcon("icon-arrow-open.png"));
- UIManager.put("Tree.collapsedIcon", ModelerUtil.buildIcon("icon-arrow-closed.png"));
- UIManager.put("Tree.paintLines", Boolean.FALSE);
- UIManager.put("Tree.selectionBorderColor", UIManager.get("Tree.selectionBackground"));
- UIManager.put("ScrollPane.border", BorderFactory.createEmptyBorder());
- UIManager.put("Table.scrollPaneBorder", BorderFactory.createEmptyBorder());
- UIManager.put("SplitPane.border", BorderFactory.createEmptyBorder());
- UIManager.put("ToolBar.border", BorderFactory.createEmptyBorder(1, 1, 1, 1));
+ Color greyHighlight = new Color(0xCBCBCB);
+
+ UIManager.put("ButtonUI", GenericButtonUI.class.getName());
+ UIManager.put("HiResGrayFilterEnabled", Boolean.TRUE);
+ UIManager.put("Tree.expandedIcon", ModelerUtil.buildIcon("icon-arrow-open.png"));
+ UIManager.put("Tree.collapsedIcon", ModelerUtil.buildIcon("icon-arrow-closed.png"));
+ UIManager.put("Tree.paintLines", Boolean.FALSE);
+ UIManager.put("Tree.selectionForeground", Color.BLACK);
+ UIManager.put("Tree.selectionBackground", greyHighlight);
+ UIManager.put("Tree.selectionBorderColor", UIManager.get("Tree.selectionBackground"));
+ UIManager.put("ScrollPane.border", BorderFactory.createEmptyBorder());
+ UIManager.put("Table.scrollPaneBorder", BorderFactory.createEmptyBorder());
+ UIManager.put("SplitPane.border", BorderFactory.createEmptyBorder());
+ UIManager.put("ToolBar.border", BorderFactory.createEmptyBorder(1, 1, 1, 1));
+ UIManager.put("MenuItem.selectionBackground", greyHighlight);
+ UIManager.put("MenuItem.selectionForeground", Color.BLACK);
// this one is custom for MainToolBar
- UIManager.put("MainToolBar.border", BorderFactory.createLineBorder(Color.GRAY));
+ UIManager.put("MainToolBar.border", BorderFactory.createLineBorder(Color.GRAY));
}
protected PlasticTheme findTheme() {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler-mac-ext/src/main/java/org/apache/cayenne/modeler/osx/OSXPlatformInitializer.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler-mac-ext/src/main/java/org/apache/cayenne/modeler/osx/OSXPlatformInitializer.java b/modeler/cayenne-modeler-mac-ext/src/main/java/org/apache/cayenne/modeler/osx/OSXPlatformInitializer.java
index 4ddbdc2..eee5c26 100644
--- a/modeler/cayenne-modeler-mac-ext/src/main/java/org/apache/cayenne/modeler/osx/OSXPlatformInitializer.java
+++ b/modeler/cayenne-modeler-mac-ext/src/main/java/org/apache/cayenne/modeler/osx/OSXPlatformInitializer.java
@@ -20,6 +20,7 @@ package org.apache.cayenne.modeler.osx;
import java.awt.Color;
import java.awt.Component;
+import java.awt.Graphics;
import java.util.HashSet;
import java.util.Set;
@@ -31,6 +32,7 @@ import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.UIManager;
+import javax.swing.border.AbstractBorder;
import javax.swing.border.Border;
import org.apache.cayenne.di.Inject;
@@ -81,8 +83,8 @@ public class OSXPlatformInitializer implements PlatformInitializer {
}
private void overrideUIDefaults() {
- Color lightGrey = new Color(0xEEEEEE);
- Color darkGrey = new Color(225, 225, 225);
+ final Color lightGrey = new Color(0xEEEEEE);
+ final Color darkGrey = new Color(225, 225, 225);
Border darkBorder = BorderFactory.createLineBorder(darkGrey);
UIManager.put("ToolBarSeparatorUI", OSXToolBarSeparatorUI.class.getName());
@@ -97,6 +99,20 @@ public class OSXPlatformInitializer implements PlatformInitializer {
UIManager.put("SplitPane.border", BorderFactory.createEmptyBorder());
UIManager.put("SplitPane.background", darkGrey);
UIManager.put("Tree.rendererFillBackground", Boolean.TRUE);
+ UIManager.put("Tree.selectionForeground", Color.BLACK);
+ UIManager.put("Tree.selectionBackground", lightGrey);
+ UIManager.put("Tree.selectionBorderColor", lightGrey);
+
+ Border backgroundPainter = new AbstractBorder() {
+ @Override
+ public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
+ g.setColor(lightGrey);
+ g.fillRect(0, 0, width - 1, height - 1);
+ }
+ };
+ UIManager.put("MenuItem.selectedBackgroundPainter", backgroundPainter);
+ UIManager.put("MenuItem.selectionForeground", Color.BLACK);
+
}
public void setupMenus(JFrame frame) {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java
index 955b3a4..378df42 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerFrame.java
@@ -159,7 +159,7 @@ public class CayenneModelerFrame extends JFrame implements DataNodeDisplayListen
recentFileListeners = new Vector<>();
- setIconImage(ModelerUtil.buildIcon("CayenneModeler.jpg").getImage());
+ setIconImage(ModelerUtil.buildIcon("CayenneModeler.png").getImage());
initMenus();
initToolbar();
initStatusBar();
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java
index 9080833..1d12407 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityAction.java
@@ -52,7 +52,6 @@ public class CreateObjEntityAction extends CayenneAction {
return "Create ObjEntity";
}
-
static void fireObjEntityEvent(
Object src,
ProjectController mediator,
@@ -71,7 +70,7 @@ public class CreateObjEntityAction extends CayenneAction {
@Override
public String getIconName() {
- return "icon-new_objentity.png";
+ return "icon-objentity.png";
}
@Override
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityFromDbAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityFromDbAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityFromDbAction.java
new file mode 100644
index 0000000..a4d29fb
--- /dev/null
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/CreateObjEntityFromDbAction.java
@@ -0,0 +1,37 @@
+/*****************************************************************
+ * 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.cayenne.modeler.action;
+
+import org.apache.cayenne.modeler.Application;
+
+/**
+ * @since 4.1
+ */
+public class CreateObjEntityFromDbAction extends CreateObjEntityAction {
+
+ public CreateObjEntityFromDbAction(Application application) {
+ super(application);
+ }
+
+ @Override
+ public String getIconName() {
+ return "icon-new_objentity.png";
+ }
+}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DefaultActionManager.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DefaultActionManager.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DefaultActionManager.java
index 1b74901..af2f225 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DefaultActionManager.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/DefaultActionManager.java
@@ -73,6 +73,7 @@ public class DefaultActionManager implements ActionManager {
registerAction(new CreateDataMapAction(application));
registerAction(new GenerateCodeAction(application));
registerAction(new CreateObjEntityAction(application));
+ registerAction(new CreateObjEntityFromDbAction(application));
registerAction(new CreateDbEntityAction(application));
registerAction(new CreateProcedureAction(application));
registerAction(new CreateProcedureParameterAction(application));
@@ -141,14 +142,14 @@ public class DefaultActionManager implements ActionManager {
}
private void initActions() {
- SPECIAL_ACTIONS = new HashSet<String>();
+ SPECIAL_ACTIONS = new HashSet<>();
SPECIAL_ACTIONS.addAll(Arrays.asList(
SaveAction.class.getName(),
UndoAction.class.getName(),
RedoAction.class.getName()));
- PROJECT_ACTIONS = new HashSet<String>();
+ PROJECT_ACTIONS = new HashSet<>();
PROJECT_ACTIONS.addAll(Arrays.asList(
RevertAction.class.getName(),
ProjectAction.class.getName(),
@@ -156,7 +157,7 @@ public class DefaultActionManager implements ActionManager {
SaveAsAction.class.getName(),
FindAction.class.getName()));
- DOMAIN_ACTIONS = new HashSet<String>(PROJECT_ACTIONS);
+ DOMAIN_ACTIONS = new HashSet<>(PROJECT_ACTIONS);
DOMAIN_ACTIONS.addAll(Arrays.asList(
ImportDataMapAction.class.getName(),
CreateDataMapAction.class.getName(),
@@ -167,12 +168,12 @@ public class DefaultActionManager implements ActionManager {
GenerateDBAction.class.getName(),
PasteAction.class.getName()));
- DATA_NODE_ACTIONS = new HashSet<String>(DOMAIN_ACTIONS);
+ DATA_NODE_ACTIONS = new HashSet<>(DOMAIN_ACTIONS);
DATA_NODE_ACTIONS.addAll(Arrays.asList(
LinkDataMapsAction.class.getName(),
RemoveAction.class.getName()));
- DATA_MAP_ACTIONS = new HashSet<String>(DOMAIN_ACTIONS);
+ DATA_MAP_ACTIONS = new HashSet<>(DOMAIN_ACTIONS);
DATA_MAP_ACTIONS.addAll(Arrays.asList(
CreateEmbeddableAction.class.getName(),
CreateObjEntityAction.class.getName(),
@@ -185,7 +186,7 @@ public class DefaultActionManager implements ActionManager {
CutAction.class.getName(),
CopyAction.class.getName()));
- OBJ_ENTITY_ACTIONS = new HashSet<String>(DATA_MAP_ACTIONS);
+ OBJ_ENTITY_ACTIONS = new HashSet<>(DATA_MAP_ACTIONS);
OBJ_ENTITY_ACTIONS.addAll(Arrays.asList(
ObjEntitySyncAction.class.getName(),
@@ -195,25 +196,26 @@ public class DefaultActionManager implements ActionManager {
ObjEntityToSuperEntityAction.class.getName(),
ShowGraphEntityAction.class.getName()));
- DB_ENTITY_ACTIONS = new HashSet<String>(DATA_MAP_ACTIONS);
+ DB_ENTITY_ACTIONS = new HashSet<>(DATA_MAP_ACTIONS);
DB_ENTITY_ACTIONS.addAll(Arrays.asList(
CreateAttributeAction.class.getName(),
CreateRelationshipAction.class.getName(),
DbEntitySyncAction.class.getName(),
DbEntityCounterpartAction.class.getName(),
- ShowGraphEntityAction.class.getName()));
+ ShowGraphEntityAction.class.getName(),
+ CreateObjEntityFromDbAction.class.getName()));
- EMBEDDABLE_ACTIONS = new HashSet<String>(DATA_MAP_ACTIONS);
+ EMBEDDABLE_ACTIONS = new HashSet<>(DATA_MAP_ACTIONS);
- EMBEDDABLE_ACTIONS.addAll(Arrays.asList(CreateAttributeAction.class.getName()));
+ EMBEDDABLE_ACTIONS.addAll(Collections.singletonList(CreateAttributeAction.class.getName()));
- PROCEDURE_ACTIONS = new HashSet<String>(DATA_MAP_ACTIONS);
+ PROCEDURE_ACTIONS = new HashSet<>(DATA_MAP_ACTIONS);
- PROCEDURE_ACTIONS.addAll(Arrays.asList(CreateProcedureParameterAction.class
+ PROCEDURE_ACTIONS.addAll(Collections.singletonList(CreateProcedureParameterAction.class
.getName()));
- MULTIPLE_OBJECTS_ACTIONS = new HashSet<String>(PROJECT_ACTIONS);
+ MULTIPLE_OBJECTS_ACTIONS = new HashSet<>(PROJECT_ACTIONS);
MULTIPLE_OBJECTS_ACTIONS.addAll(Arrays.asList(
RemoveAction.class.getName(),
@@ -248,6 +250,7 @@ public class DefaultActionManager implements ActionManager {
}
}
+ @SuppressWarnings("unchecked")
public <T extends Action> T getAction(Class<T> actionClass) {
return (T) actionMap.get(actionClass.getName());
}
@@ -322,7 +325,7 @@ public class DefaultActionManager implements ActionManager {
boolean canCopy = true; // cut/copy can be performed if selected objects are on
// the same level
- if (!cutAction.enableForPath((ConfigurationNode) objects[0])) {
+ if (!cutAction.enableForPath(objects[0])) {
canCopy = false;
}
else {
@@ -333,7 +336,7 @@ public class DefaultActionManager implements ActionManager {
for (int i = 1; i < objects.length; i++) {
if (parentGetter.getParent(objects[i]) != parent
- || !cutAction.enableForPath((ConfigurationNode) objects[i])) {
+ || !cutAction.enableForPath(objects[i])) {
canCopy = false;
break;
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ImportEOModelAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ImportEOModelAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ImportEOModelAction.java
index 369a8ed..25bff6d 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ImportEOModelAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ImportEOModelAction.java
@@ -77,6 +77,10 @@ public class ImportEOModelAction extends CayenneAction {
super(getActionName(), application);
}
+ public String getIconName() {
+ return "icon-eomodel.png";
+ }
+
public void performAction(ActionEvent event) {
importEOModel();
}
@@ -294,7 +298,7 @@ public class ImportEOModelAction extends CayenneAction {
}
else {
// fix DataMap name, as there maybe a map with the same name already
- ConfigurationNode root = (DataChannelDescriptor) mediator.getProject().getRootNode();
+ ConfigurationNode root = mediator.getProject().getRootNode();
map.setName(NameBuilder
.builder(map, root)
.baseName(map.getName())
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributePanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributePanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributePanel.java
index 263a0c0..7cae33e 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributePanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributePanel.java
@@ -463,10 +463,6 @@ public class ObjEntityAttributePanel extends JPanel implements ObjEntityDisplayL
} else {
if (attribute.isInherited()) {
Icon objEntityIcon = ModelerUtil.buildIcon("icon-inheritance.png");
- if(isSelected) {
- objEntityIcon = FilteredIconFactory
- .createIcon(objEntityIcon, FilteredIconFactory.FilterType.SELECTION);
- }
setIcon(objEntityIcon);
}
setText("");
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipPanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipPanel.java
index 01bab81..c7c3788 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipPanel.java
@@ -388,7 +388,6 @@ public class ObjEntityRelationshipPanel extends JPanel implements ObjEntityDispl
Icon icon = CellRenderers.iconForObject(oldValue);
if(isSelected) {
- icon = FilteredIconFactory.createIcon(icon, FilteredIconFactory.FilterType.SELECTION);
setForeground(UIManager.getColor("Table.selectionForeground"));
}
setIcon(icon);
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityAttributeRelationshipTab.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityAttributeRelationshipTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityAttributeRelationshipTab.java
index e417f88..792e19f 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityAttributeRelationshipTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityAttributeRelationshipTab.java
@@ -27,7 +27,7 @@ import org.apache.cayenne.modeler.ProjectController;
import org.apache.cayenne.modeler.action.ActionManager;
import org.apache.cayenne.modeler.action.CopyAttributeRelationshipAction;
import org.apache.cayenne.modeler.action.CreateAttributeAction;
-import org.apache.cayenne.modeler.action.CreateObjEntityAction;
+import org.apache.cayenne.modeler.action.CreateObjEntityFromDbAction;
import org.apache.cayenne.modeler.action.CreateRelationshipAction;
import org.apache.cayenne.modeler.action.CutAttributeRelationshipAction;
import org.apache.cayenne.modeler.action.DbEntityCounterpartAction;
@@ -107,7 +107,7 @@ public class DbEntityAttributeRelationshipTab extends JPanel implements DbEntity
toolBar.add(actionManager.getAction(CreateRelationshipAction.class).buildButton(3));
toolBar.addSeparator();
- toolBar.add(actionManager.getAction(CreateObjEntityAction.class).buildButton(1));
+ toolBar.add(actionManager.getAction(CreateObjEntityFromDbAction.class).buildButton(1));
toolBar.add(actionManager.getAction(DbEntitySyncAction.class).buildButton(2));
toolBar.add(actionManager.getAction(DbEntityCounterpartAction.class).buildButton(3));
toolBar.addSeparator();
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityTab.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityTab.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityTab.java
index d772a46..2127797 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityTab.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/dbentity/DbEntityTab.java
@@ -43,7 +43,7 @@ import org.apache.cayenne.modeler.Application;
import org.apache.cayenne.modeler.ProjectController;
import org.apache.cayenne.modeler.action.ActionManager;
import org.apache.cayenne.modeler.action.CreateAttributeAction;
-import org.apache.cayenne.modeler.action.CreateObjEntityAction;
+import org.apache.cayenne.modeler.action.CreateObjEntityFromDbAction;
import org.apache.cayenne.modeler.action.CreateRelationshipAction;
import org.apache.cayenne.modeler.action.DbEntityCounterpartAction;
import org.apache.cayenne.modeler.action.DbEntitySyncAction;
@@ -103,7 +103,7 @@ public class DbEntityTab extends JPanel implements ExistingSelectionProcessor, D
toolBar.add(actionManager.getAction(CreateRelationshipAction.class).buildButton(3));
toolBar.addSeparator();
- toolBar.add(actionManager.getAction(CreateObjEntityAction.class).buildButton(1));
+ toolBar.add(actionManager.getAction(CreateObjEntityFromDbAction.class).buildButton(1));
toolBar.add(actionManager.getAction(DbEntitySyncAction.class).buildButton(2));
toolBar.add(actionManager.getAction(DbEntityCounterpartAction.class).buildButton(3));
toolBar.addSeparator();
@@ -206,10 +206,7 @@ public class DbEntityTab extends JPanel implements ExistingSelectionProcessor, D
return;
}
- // if entity hasn't changed, still notify PK Generator panels, as entity
- // PK may
- // have changed...
-
+ // if entity hasn't changed, still notify PK Generator panels, as entity PK may have changed...
for (int i = 0; i < pkGeneratorDetail.getComponentCount(); i++) {
((PKGeneratorPanel) pkGeneratorDetail.getComponent(i)).setDbEntity(entity);
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneAction.java
index 213b5f6..a896466 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneAction.java
@@ -240,31 +240,10 @@ public abstract class CayenneAction extends AbstractAction {
public CayenneMenuItem(String title, Icon icon) {
super(title, icon);
- updateActiveIcon();
}
public CayenneMenuItem(AbstractAction action) {
super(action);
- updateActiveIcon();
- }
-
- protected void updateActiveIcon() {
- final Icon icon = getIcon();
- final Icon selectedIcon = FilteredIconFactory.createIcon(icon, FilteredIconFactory.FilterType.WHITE);
- // this wouldn't work on MacOS, as it uses native menu
- addMouseListener(new MouseAdapter() {
- @Override
- public void mouseEntered(MouseEvent e) {
- if(isEnabled()) {
- setIcon(selectedIcon);
- }
- }
-
- @Override
- public void mouseExited(MouseEvent e) {
- setIcon(icon);
- }
- });
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CellRenderers.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CellRenderers.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CellRenderers.java
index 58cebac..8a9e562 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CellRenderers.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CellRenderers.java
@@ -60,23 +60,14 @@ import org.apache.cayenne.util.CayenneMapEntry;
public final class CellRenderers {
// common icons
- protected static Icon domainIcon = FilteredIconFactory.createIcon(
- ModelerUtil.buildIcon("icon-dom.png"), FilteredIconFactory.FilterType.GRAY);
- protected static Icon nodeIcon = FilteredIconFactory.createIcon(
- ModelerUtil.buildIcon("icon-node.png"), FilteredIconFactory.FilterType.GRAY);
- protected static Icon mapIcon = FilteredIconFactory.createIcon(
- ModelerUtil.buildIcon("icon-datamap.png"), FilteredIconFactory.FilterType.GRAY);
- protected static Icon dbEntityIcon = FilteredIconFactory.createIcon(
- ModelerUtil.buildIcon("icon-dbentity.png"), FilteredIconFactory.FilterType.BLUE);
- protected static Icon objEntityIcon = FilteredIconFactory.createIcon(
- ModelerUtil.buildIcon("icon-objentity.png"), FilteredIconFactory.FilterType.GREEN);
- protected static Icon procedureIcon = FilteredIconFactory.createIcon(
- ModelerUtil.buildIcon("icon-stored-procedure.png"), FilteredIconFactory.FilterType.GRAY);
- protected static Icon queryIcon = FilteredIconFactory.createIcon(
- ModelerUtil.buildIcon("icon-query.png"), FilteredIconFactory.FilterType.GRAY);
- protected static Icon embeddableIcon = FilteredIconFactory.createIcon(
- ModelerUtil.buildIcon("icon-embeddable.png"), FilteredIconFactory.FilterType.VIOLET);
-
+ protected static Icon domainIcon = ModelerUtil.buildIcon("icon-dom.png");
+ protected static Icon nodeIcon = ModelerUtil.buildIcon("icon-node.png");
+ protected static Icon mapIcon = ModelerUtil.buildIcon("icon-datamap.png");
+ protected static Icon dbEntityIcon = ModelerUtil.buildIcon("icon-dbentity.png");
+ protected static Icon objEntityIcon = ModelerUtil.buildIcon("icon-objentity.png");
+ protected static Icon procedureIcon = ModelerUtil.buildIcon("icon-stored-procedure.png");
+ protected static Icon queryIcon = ModelerUtil.buildIcon("icon-query.png");
+ protected static Icon embeddableIcon = ModelerUtil.buildIcon("icon-embeddable.png");
protected static Icon relationshipIcon = ModelerUtil.buildIcon("icon-relationship.png");
protected static Icon attributeIcon = ModelerUtil.buildIcon("icon-attribute.png");
@@ -218,7 +209,7 @@ public final class CellRenderers {
isSelected,
cellHasFocus);
- setIcon(isSelected ? FilteredIconFactory.createIcon(icon, FilteredIconFactory.FilterType.SELECTION) : icon);
+ setIcon(icon);//isSelected ? FilteredIconFactory.createIcon(icon, FilteredIconFactory.FilterType.SELECTION) : icon);
setFont(defaultFont);
return this;
@@ -261,7 +252,7 @@ public final class CellRenderers {
if (showIcons) {
Icon icon = iconForObject(value);
if(isSelected) {
- icon = FilteredIconFactory.createIcon(icon, FilteredIconFactory.FilterType.SELECTION);
+// icon = FilteredIconFactory.createIcon(icon, FilteredIconFactory.FilterType.SELECTION);
}
setIcon(icon);
}
@@ -296,7 +287,7 @@ public final class CellRenderers {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
Icon icon = iconForObject(node.getUserObject());
if(sel) {
- icon = FilteredIconFactory.createIcon(icon, FilteredIconFactory.FilterType.SELECTION);
+// icon = FilteredIconFactory.createIcon(icon, FilteredIconFactory.FilterType.SELECTION);
}
setIcon(icon);
setFont(defaultFont);
@@ -334,7 +325,7 @@ public final class CellRenderers {
Icon icon = CellRenderers.iconForObject(oldValue);
if(isSelected) {
- icon = FilteredIconFactory.createIcon(icon, FilteredIconFactory.FilterType.SELECTION);
+// icon = FilteredIconFactory.createIcon(icon, FilteredIconFactory.FilterType.SELECTION);
}
setIcon(icon);
setFont(defaultFont);
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/ImageRendererColumn.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/ImageRendererColumn.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/ImageRendererColumn.java
index 7380d90..0506650 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/ImageRendererColumn.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/ImageRendererColumn.java
@@ -40,9 +40,6 @@ public class ImageRendererColumn extends DefaultTableCellRenderer {
setText(((JLabel) value).getText());
setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0));
Icon icon = ((JLabel) value).getIcon();
- if(isSelected) {
- icon = FilteredIconFactory.createIcon(icon, FilteredIconFactory.FilterType.SELECTION);
- }
setIcon(icon);
return this;
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/components/image/FilteredIconFactory.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/components/image/FilteredIconFactory.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/components/image/FilteredIconFactory.java
index cb92b1c..e6ce46c 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/components/image/FilteredIconFactory.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/components/image/FilteredIconFactory.java
@@ -91,24 +91,24 @@ public class FilteredIconFactory {
static class DisabledFilter extends RGBImageFilter {
+ private static final double COLOR_FACTOR = 0.4;
+ private static final double ALPHA_FACTOR = 0.5;
+
DisabledFilter() {
canFilterIndexColorModel = true;
}
public int filterRGB(int x, int y, int rgb) {
- // find the average of red, green, and blue
- float avg = (((rgb >> 16) & 0xff) / 255f +
- ((rgb >> 8) & 0xff) / 255f +
- ( rgb & 0xff) / 255f) / 3;
- // pull out the alpha channel
- float alpha = ((rgb >> 24) & 0xff) / 255f;
- // calc the average
- avg = Math.min(1.0f, (1f - avg)/(100.0f/35.0f) + avg);
- // turn back into argb
- return (int)(alpha * 120f) << 24 |
- (int)(avg * 255f) << 16 |
- (int)(avg * 255f) << 8 |
- (int)(avg * 255f);
+ int a = (rgb >> 24) & 0xff;
+ int r = (rgb >> 16) & 0xff;
+ int g = (rgb >> 8) & 0xff;
+ int b = (rgb ) & 0xff;
+ int luminance = (int)((1 - COLOR_FACTOR) * Math.min(255.0, (r + g + b) / 3.0));
+
+ return (int)(a * ALPHA_FACTOR) << 24 |
+ (int)(r * COLOR_FACTOR + luminance) << 16 |
+ (int)(g * COLOR_FACTOR + luminance) << 8 |
+ (int)(b * COLOR_FACTOR + luminance);
}
}
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/control/FileMenuItem.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/control/FileMenuItem.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/control/FileMenuItem.java
index 95746b3..d65d4e6 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/control/FileMenuItem.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/swing/control/FileMenuItem.java
@@ -43,7 +43,6 @@ public class FileMenuItem extends CayenneAction.CayenneMenuItem {
// excludes most generic action keys that are not applicable here...
setIcon(a != null ? (Icon) a.getValue(Action.SMALL_ICON) : null);
setEnabled(a == null || a.isEnabled());
- updateActiveIcon();
}
/**
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/CayenneModeler.jpg
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/CayenneModeler.jpg b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/CayenneModeler.jpg
deleted file mode 100644
index 6167724..0000000
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/CayenneModeler.jpg and /dev/null differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/CayenneModeler.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/CayenneModeler.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/CayenneModeler.png
new file mode 100644
index 0000000..5619fd7
Binary files /dev/null and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/CayenneModeler.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-attribute.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-attribute.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-attribute.png
index 77a68eb..f5b324d 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-attribute.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-attribute.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-copy.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-copy.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-copy.png
index 3fb5c81..4f555c2 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-copy.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-copy.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-create-method.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-create-method.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-create-method.png
index 436fc06..fc27412 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-create-method.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-create-method.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-cut.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-cut.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-cut.png
index 04069de..c5b63aa 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-cut.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-cut.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-datamap.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-datamap.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-datamap.png
index 2ea96ca..90db1af 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-datamap.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-datamap.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-dbentity.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-dbentity.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-dbentity.png
index 87d9d8a..07b6a75 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-dbentity.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-dbentity.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-dom.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-dom.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-dom.png
index ce18f5f..4736338 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-dom.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-dom.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-edit.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-edit.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-edit.png
index 027c482..a874d51 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-edit.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-edit.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-embeddable.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-embeddable.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-embeddable.png
index 2f29083..38d03ea 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-embeddable.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-embeddable.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-eomodel.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-eomodel.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-eomodel.png
new file mode 100755
index 0000000..ddae288
Binary files /dev/null and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-eomodel.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-error.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-error.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-error.png
index f07791d..522ba12 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-error.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-error.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-filter.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-filter.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-filter.png
index 32d9225..d5a15e6 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-filter.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-filter.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-gen_java.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-gen_java.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-gen_java.png
index 1306768..c341424 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-gen_java.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-gen_java.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-info.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-info.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-info.png
index 2889af9..a874d51 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-info.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-info.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-inheritance.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-inheritance.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-inheritance.png
index 6805623..c04044b 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-inheritance.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-inheritance.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-move_down.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-move_down.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-move_down.png
index a766648..97f9a64 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-move_down.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-move_down.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-move_up.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-move_up.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-move_up.png
index af310a0..c69cce9 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-move_up.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-move_up.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-new.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-new.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-new.png
index da6d1d6..cc18517 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-new.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-new.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-new_embeddable.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-new_embeddable.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-new_embeddable.png
index 2f5606c..38d03ea 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-new_embeddable.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-new_embeddable.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-new_objentity.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-new_objentity.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-new_objentity.png
index 8735d7a..7530e05 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-new_objentity.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-new_objentity.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-new_query.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-new_query.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-new_query.png
index 8d9e7fa..5e16395 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-new_query.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-new_query.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-node.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-node.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-node.png
index 2ff4383..fe0f402 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-node.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-node.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-objentity.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-objentity.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-objentity.png
index b8f85e3..baf6f14 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-objentity.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-objentity.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-open.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-open.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-open.png
index 1f9589a..25569bb 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-open.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-open.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-paste.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-paste.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-paste.png
index f3d4acb..8082d46 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-paste.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-paste.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-plus.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-plus.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-plus.png
index 2c9ed93..e685b0d 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-plus.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-plus.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-query.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-query.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-query.png
index 5bac20d..4c798ee 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-query.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-query.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-redo.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-redo.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-redo.png
index 15b1183..dab2850 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-redo.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-redo.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-refresh.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-refresh.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-refresh.png
index 3d68160..a108fe0 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-refresh.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-refresh.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-relationship.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-relationship.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-relationship.png
index 44ed7eb..c7d6610 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-relationship.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-relationship.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-save-as-image.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-save-as-image.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-save-as-image.png
index e1c910a..f9ad35c 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-save-as-image.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-save-as-image.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-save.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-save.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-save.png
index 374bd6f..f49898f 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-save.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-save.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-stored-procedure.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-stored-procedure.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-stored-procedure.png
index ef9f396..efae280 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-stored-procedure.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-stored-procedure.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-sync.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-sync.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-sync.png
index 03e8623..d194ea7 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-sync.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-sync.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-trash.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-trash.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-trash.png
index 8d031f2..333477a 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-trash.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-trash.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-tree-collapse.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-tree-collapse.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-tree-collapse.png
index 64291d5..3f2c9ff 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-tree-collapse.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-tree-collapse.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-undo.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-undo.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-undo.png
index 96f7b2b..7077a29 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-undo.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-undo.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-zoom-in.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-zoom-in.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-zoom-in.png
index 71218f2..189ef6b 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-zoom-in.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-zoom-in.png differ
http://git-wip-us.apache.org/repos/asf/cayenne/blob/ba750c5b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-zoom-out.png
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-zoom-out.png b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-zoom-out.png
index f53751e..3e377a8 100755
Binary files a/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-zoom-out.png and b/modeler/cayenne-modeler/src/main/resources/org/apache/cayenne/modeler/images/icon-zoom-out.png differ
[2/4] cayenne git commit: CAY-2412 test case + warning about limit
with joint prefetch
Posted by nt...@apache.org.
CAY-2412 test case + warning about limit with joint prefetch
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/26330d4c
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/26330d4c
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/26330d4c
Branch: refs/heads/STABLE-4.0
Commit: 26330d4cb1edfa66f2c02e32462c85b5101edd6b
Parents: a16d7c4
Author: Nikita Timofeev <st...@gmail.com>
Authored: Tue Mar 6 17:38:54 2018 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Tue Mar 6 17:38:54 2018 +0300
----------------------------------------------------------------------
.../select/DefaultSelectTranslator.java | 68 ++++++++++++
.../test/java/org/apache/cayenne/Cay2412IT.java | 110 +++++++++++++++++++
2 files changed, 178 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/26330d4c/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/DefaultSelectTranslator.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/DefaultSelectTranslator.java b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/DefaultSelectTranslator.java
index e455901..d933a39 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/DefaultSelectTranslator.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/access/translator/select/DefaultSelectTranslator.java
@@ -42,6 +42,7 @@ import org.apache.cayenne.map.ObjAttribute;
import org.apache.cayenne.map.ObjEntity;
import org.apache.cayenne.map.ObjRelationship;
import org.apache.cayenne.map.PathComponent;
+import org.apache.cayenne.query.PrefetchProcessor;
import org.apache.cayenne.query.PrefetchSelectQuery;
import org.apache.cayenne.query.PrefetchTreeNode;
import org.apache.cayenne.query.Query;
@@ -55,6 +56,8 @@ import org.apache.cayenne.reflect.ToOneProperty;
import org.apache.cayenne.util.CayenneMapEntry;
import org.apache.cayenne.util.EqualsBuilder;
import org.apache.cayenne.util.HashCodeBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.sql.Types;
import java.util.ArrayList;
@@ -72,6 +75,8 @@ import java.util.Set;
*/
public class DefaultSelectTranslator extends QueryAssembler implements SelectTranslator {
+ private static final Logger logger = LoggerFactory.getLogger(SelectTranslator.class);
+
protected static final int[] UNSUPPORTED_DISTINCT_TYPES = { Types.BLOB, Types.CLOB, Types.NCLOB,
Types.LONGVARBINARY, Types.LONGVARCHAR, Types.LONGNVARCHAR };
@@ -110,6 +115,8 @@ public class DefaultSelectTranslator extends QueryAssembler implements SelectTra
*/
AddJoinListener joinListener;
+ JointPrefetchChecker jointPrefetchChecker = new JointPrefetchChecker();
+
public DefaultSelectTranslator(Query query, DbAdapter adapter, EntityResolver entityResolver) {
super(query, adapter, entityResolver);
@@ -129,6 +136,8 @@ public class DefaultSelectTranslator extends QueryAssembler implements SelectTra
@Override
protected void doTranslate() {
+ checkLimitAndJointPrefetch();
+
DataMap dataMap = queryMetadata.getDataMap();
JoinStack joins = getJoinStack();
@@ -249,6 +258,22 @@ public class DefaultSelectTranslator extends QueryAssembler implements SelectTra
}
/**
+ * Warn user in case query uses both limit and joint prefetch, as we don't support this combination.
+ */
+ private void checkLimitAndJointPrefetch() {
+ if(queryMetadata.getFetchLimit() == 0 && queryMetadata.getFetchOffset() == 0) {
+ return;
+ }
+
+ if(!jointPrefetchChecker.haveJointNode(queryMetadata.getPrefetchTree())) {
+ return;
+ }
+
+ logger.warn("Query uses both limit and joint prefetch, this most probably will lead to incorrect result. " +
+ "Either use disjointById prefetch or get full result set.");
+ }
+
+ /**
* Allows subclasses to insert their own dialect of DISTINCT statement to
* improve performance.
*
@@ -925,4 +950,47 @@ public class DefaultSelectTranslator extends QueryAssembler implements SelectTra
interface AddJoinListener {
void joinAdded();
}
+
+ private static class JointPrefetchChecker implements PrefetchProcessor {
+ private boolean haveJointNode;
+
+ public JointPrefetchChecker() {
+ }
+
+ public boolean haveJointNode(PrefetchTreeNode prefetchTree) {
+ haveJointNode = false;
+ prefetchTree.traverse(this);
+ return haveJointNode;
+ }
+
+ @Override
+ public boolean startPhantomPrefetch(PrefetchTreeNode node) {
+ return true;
+ }
+
+ @Override
+ public boolean startDisjointPrefetch(PrefetchTreeNode node) {
+ return true;
+ }
+
+ @Override
+ public boolean startDisjointByIdPrefetch(PrefetchTreeNode prefetchTreeNode) {
+ return true;
+ }
+
+ @Override
+ public boolean startJointPrefetch(PrefetchTreeNode node) {
+ haveJointNode = true;
+ return false;
+ }
+
+ @Override
+ public boolean startUnknownPrefetch(PrefetchTreeNode node) {
+ return true;
+ }
+
+ @Override
+ public void finishPrefetch(PrefetchTreeNode node) {
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/26330d4c/cayenne-server/src/test/java/org/apache/cayenne/Cay2412IT.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/Cay2412IT.java b/cayenne-server/src/test/java/org/apache/cayenne/Cay2412IT.java
new file mode 100644
index 0000000..26b6049
--- /dev/null
+++ b/cayenne-server/src/test/java/org/apache/cayenne/Cay2412IT.java
@@ -0,0 +1,110 @@
+/*****************************************************************
+ * 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.cayenne;
+
+import java.sql.Types;
+
+import org.apache.cayenne.access.DataContext;
+import org.apache.cayenne.di.Inject;
+import org.apache.cayenne.query.ObjectSelect;
+import org.apache.cayenne.test.jdbc.DBHelper;
+import org.apache.cayenne.test.jdbc.TableHelper;
+import org.apache.cayenne.testdo.testmap.Artist;
+import org.apache.cayenne.unit.di.server.CayenneProjects;
+import org.apache.cayenne.unit.di.server.ServerCase;
+import org.apache.cayenne.unit.di.server.UseServerRuntime;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * @since 4.1
+ */
+@UseServerRuntime(CayenneProjects.TESTMAP_PROJECT)
+public class Cay2412IT extends ServerCase {
+
+ @Inject
+ DataContext context;
+
+ @Inject
+ private DBHelper dbHelper;
+
+ @Before
+ public void prepareData() throws Exception {
+ TableHelper tArtist = new TableHelper(dbHelper, "ARTIST");
+ tArtist.setColumns("ARTIST_ID", "ARTIST_NAME", "DATE_OF_BIRTH");
+ tArtist.setColumnTypes(Types.INTEGER, Types.VARCHAR, Types.DATE);
+ tArtist.insert(1, "artist1", new java.sql.Date(System.currentTimeMillis()));
+
+ TableHelper tGallery = new TableHelper(dbHelper, "GALLERY");
+ tGallery.setColumns("GALLERY_ID", "GALLERY_NAME");
+ tGallery.insert(1, "tate modern");
+
+ TableHelper tPaintings = new TableHelper(dbHelper, "PAINTING");
+ tPaintings.setColumns("PAINTING_ID", "PAINTING_TITLE", "ARTIST_ID", "GALLERY_ID", "ESTIMATED_PRICE");
+ for (int i = 1; i <= 3; i++) {
+ tPaintings.insert(i, "painting" + i, 1, 1, 22 - i);
+ }
+ }
+
+ @Ignore("selectFirst() call corrupts object state in context, and because of cache it's also returned for unrelated query")
+ @Test
+ public void testJoinPrefetchWithLimitBeforeFullSelect() {
+ Artist artist0 = ObjectSelect.query(Artist.class)
+ .prefetch(Artist.PAINTING_ARRAY.joint())
+ .localCache("test")
+ .selectOne(context);
+ assertEquals(3, artist0.getPaintingArray().size());
+
+ Artist artist1 = ObjectSelect.query(Artist.class)
+ .prefetch(Artist.PAINTING_ARRAY.joint())
+ .selectFirst(context);
+ assertEquals(1, artist1.getPaintingArray().size()); // <-- wrong assertion, but expected
+
+ Artist artist2 = ObjectSelect.query(Artist.class)
+ .prefetch(Artist.PAINTING_ARRAY.joint())
+ .localCache("test")
+ .selectOne(context);
+ assertEquals(3, artist2.getPaintingArray().size()); // <-- assertion failure here, got 1 instead of 3
+ }
+
+ @Test
+ public void testDisjointByIdPrefetchWithLimitBeforeFullSelect() {
+ Artist artist0 = ObjectSelect.query(Artist.class)
+ .prefetch(Artist.PAINTING_ARRAY.disjointById())
+ .localCache("test")
+ .selectOne(context);
+ assertEquals(3, artist0.getPaintingArray().size());
+
+ Artist artist1 = ObjectSelect.query(Artist.class)
+ .prefetch(Artist.PAINTING_ARRAY.disjointById())
+ .selectFirst(context);
+ assertEquals(3, artist1.getPaintingArray().size());
+
+ Artist artist2 = ObjectSelect.query(Artist.class)
+ .prefetch(Artist.PAINTING_ARRAY.disjointById())
+ .localCache("test")
+ .selectOne(context);
+ assertEquals(3, artist2.getPaintingArray().size());
+ }
+
+}