You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by sk...@apache.org on 2016/11/16 18:48:10 UTC

[1/4] cayenne git commit: Exception in Infer relationships Exception in importing datamap with query name conflicts (unfinished patch) Fix db path selection in ObjAttribute

Repository: cayenne
Updated Branches:
  refs/heads/master 74e5e2f3c -> e308a16f7


Exception in Infer relationships
Exception in importing datamap with query name conflicts (unfinished patch)
Fix db path selection in ObjAttribute


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

Branch: refs/heads/master
Commit: c81cb742642f990d6a4b7bb0d91860fdbf9e0373
Parents: 56906f0
Author: Nikita Timofeev <st...@gmail.com>
Authored: Mon Nov 14 12:31:17 2016 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Mon Nov 14 12:31:17 2016 +0300

----------------------------------------------------------------------
 .../naming/DefaultObjectNameGenerator.java      |  4 +++
 .../org/apache/cayenne/map/MappingCache.java    |  8 +++--
 .../modeler/util/DefaultWidgetFactory.java      | 20 +++++------
 .../util/PathChooserComboBoxCellEditor.java     | 37 +++++++++++++++-----
 .../cayenne/modeler/util/WidgetFactory.java     | 10 +++---
 5 files changed, 53 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/c81cb742/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/DefaultObjectNameGenerator.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/DefaultObjectNameGenerator.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/DefaultObjectNameGenerator.java
index ecfebc3..4559ab6 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/DefaultObjectNameGenerator.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/naming/DefaultObjectNameGenerator.java
@@ -38,6 +38,10 @@ public class DefaultObjectNameGenerator implements ObjectNameGenerator {
 
     private DbEntityNameStemmer dbEntityNameStemmer;
 
+    public DefaultObjectNameGenerator() {
+        this.dbEntityNameStemmer = NoStemStemmer.getInstance();
+    }
+
     public DefaultObjectNameGenerator(DbEntityNameStemmer dbEntityNameStemmer) {
         this.dbEntityNameStemmer = dbEntityNameStemmer;
     }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/c81cb742/cayenne-server/src/main/java/org/apache/cayenne/map/MappingCache.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/map/MappingCache.java b/cayenne-server/src/main/java/org/apache/cayenne/map/MappingCache.java
index d2704fd..8c7f8c2 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/map/MappingCache.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/map/MappingCache.java
@@ -117,9 +117,11 @@ class MappingCache implements MappingNamespace {
                 String name = queryDescriptor.getName();
                 QueryDescriptor existingQueryDescriptor = queryDesriptors.put(name, queryDescriptor);
 
-                if (existingQueryDescriptor != null && queryDescriptor != existingQueryDescriptor) {
-                    throw new CayenneRuntimeException("More than one QueryDescriptor for name: " + name);
-                }
+                // No exception is thrown in case of any other entity's name conflict.
+                // Why do we throw it here!?
+//                if (existingQueryDescriptor != null && queryDescriptor != existingQueryDescriptor) {
+//                    throw new CayenneRuntimeException("More than one QueryDescriptor for name: " + name);
+//                }
             }
         }
 

http://git-wip-us.apache.org/repos/asf/cayenne/blob/c81cb742/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/DefaultWidgetFactory.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/DefaultWidgetFactory.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/DefaultWidgetFactory.java
index da6463f..e4fea78 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/DefaultWidgetFactory.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/DefaultWidgetFactory.java
@@ -40,29 +40,29 @@ public class DefaultWidgetFactory implements WidgetFactory {
     /**
      * Creates a new JComboBox with a collection of model objects.
      */
-    public JComboBox createComboBox(Collection<String> model, boolean sort) {
-        return createComboBox(model.toArray(), sort);
+    public JComboBox<String> createComboBox(Collection<String> model, boolean sort) {
+        return createComboBox(model.toArray(new String[0]), sort);
     }
 
     /**
      * Creates a new JComboBox with an array of model objects.
      */
-    public JComboBox createComboBox(Object[] model, boolean sort) {
-        JComboBox comboBox = createComboBox();
+    public <T> JComboBox<T> createComboBox(T[] model, boolean sort) {
+        JComboBox<T> comboBox = createComboBox();
 
         if (sort) {
             Arrays.sort(model);
         }
 
-        comboBox.setModel(new DefaultComboBoxModel(model));
+        comboBox.setModel(new DefaultComboBoxModel<>(model));
         return comboBox;
     }
 
     /**
      * Creates a new JComboBox.
      */
-    public JComboBox createComboBox() {
-        JComboBox comboBox = new JComboBox();
+    public <T> JComboBox<T> createComboBox() {
+        JComboBox<T> comboBox = new JComboBox<>();
         comboBox.setFont(new Font("Verdana", Font.PLAIN , 12));
         comboBox.setBackground(Color.WHITE);
         comboBox.setMaximumRowCount(ModelerPreferences.COMBOBOX_MAX_VISIBLE_SIZE);
@@ -73,8 +73,8 @@ public class DefaultWidgetFactory implements WidgetFactory {
      * Creates undoable JComboBox.
      * 
      */
-    public JComboBox createUndoableComboBox() {
-        JComboBox comboBox = new JComboBox();
+    public <T> JComboBox<T> createUndoableComboBox() {
+        JComboBox<T> comboBox = new JComboBox<>();
         comboBox.addItemListener(new JComboBoxUndoListener());
         comboBox.setBackground(Color.WHITE);
         comboBox.setMaximumRowCount(ModelerPreferences.COMBOBOX_MAX_VISIBLE_SIZE);
@@ -95,7 +95,7 @@ public class DefaultWidgetFactory implements WidgetFactory {
      * 
      * @param combo JComboBox to be used as editor component
      */
-    public TableCellEditor createCellEditor(JComboBox combo) {
+    public TableCellEditor createCellEditor(JComboBox<?> combo) {
         combo.setBorder(BorderFactory.createEmptyBorder(0,5,0,0));
         if (Boolean.TRUE.equals(combo
                 .getClientProperty(AutoCompletion.AUTOCOMPLETION_PROPERTY))) {

http://git-wip-us.apache.org/repos/asf/cayenne/blob/c81cb742/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/PathChooserComboBoxCellEditor.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/PathChooserComboBoxCellEditor.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/PathChooserComboBoxCellEditor.java
index fd796f8..433267f 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/PathChooserComboBoxCellEditor.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/PathChooserComboBoxCellEditor.java
@@ -36,6 +36,8 @@ import javax.swing.JList;
 import javax.swing.JPanel;
 import javax.swing.JTable;
 import javax.swing.ListCellRenderer;
+import javax.swing.event.PopupMenuEvent;
+import javax.swing.event.PopupMenuListener;
 import javax.swing.table.TableCellEditor;
 import javax.swing.text.JTextComponent;
 import java.awt.BorderLayout;
@@ -53,9 +55,10 @@ import java.util.regex.Pattern;
  * This class used as cell editor, when you need to
  * choose path in comboBox and use autocompletion.
  */
-public abstract class PathChooserComboBoxCellEditor extends AbstractCellEditor implements TableCellEditor, ActionListener {
+@SuppressWarnings("WeakerAccess")
+public abstract class PathChooserComboBoxCellEditor extends AbstractCellEditor implements TableCellEditor, ActionListener, PopupMenuListener {
 
-    protected JComboBox comboBoxPathChooser;
+    protected JComboBox<String> comboBoxPathChooser;
     protected int previousEmbeddedLevel = 0;
     protected EntityTreeModel treeModel;
     protected int row;
@@ -92,15 +95,17 @@ public abstract class PathChooserComboBoxCellEditor extends AbstractCellEditor i
         comboBoxPathChooser.setBorder(BorderFactory.createEmptyBorder(0,5,0,0));
         comboBoxPathChooser.setRenderer(new PathChooserComboBoxCellRenderer());
         comboBoxPathChooser.addActionListener(this);
+        comboBoxPathChooser.addPopupMenuListener(this);
     }
 
     private void setComboModelAccordingToPath(String pathString) {
         List<String> currentNodeChildren = new ArrayList<>();
         currentNodeChildren.addAll(getChildren(getCurrentNode(pathString), pathString));
-        comboBoxPathChooser.setModel(new DefaultComboBoxModel(currentNodeChildren.toArray()));
+        comboBoxPathChooser.setModel(new DefaultComboBoxModel<>(currentNodeChildren.toArray(new String[0])));
         comboBoxPathChooser.setSelectedItem(pathString);
-        comboBoxPathChooser.showPopup();
-        comboBoxPathChooser.setPopupVisible(true);
+        if(!pathString.isEmpty()) {
+            comboBoxPathChooser.showPopup();
+        }
     }
 
     protected void parsePathString(char lastEnteredCharacter) {
@@ -127,9 +132,8 @@ public abstract class PathChooserComboBoxCellEditor extends AbstractCellEditor i
             pathString = pathString.replaceAll(lastStringInPath + "$", "");
             List<String> currentNodeChildren = new ArrayList<>();
             currentNodeChildren.addAll(getChildren(getCurrentNode(pathString), pathString));
-            comboBoxPathChooser.setModel(new DefaultComboBoxModel(currentNodeChildren.toArray()));
+            comboBoxPathChooser.setModel(new DefaultComboBoxModel<>(currentNodeChildren.toArray(new String[0])));
             comboBoxPathChooser.setSelectedItem(saveDbAttributePath);
-            return;
         }
     }
 
@@ -171,7 +175,7 @@ public abstract class PathChooserComboBoxCellEditor extends AbstractCellEditor i
     /**
      * find current node by path
      *
-     * @param pathString
+     * @param pathString db path
      * @return last node in path which matches DbRelationship or DbAttribute
      */
     protected Object getCurrentNode(String pathString) {
@@ -215,14 +219,31 @@ public abstract class PathChooserComboBoxCellEditor extends AbstractCellEditor i
         if (comboBoxPathChooser.getSelectedIndex() != (-1)) {
             ((JTextComponent) (comboBoxPathChooser).
                     getEditor().getEditorComponent()).setText(comboBoxPathChooser.getSelectedItem().toString());
+        }
+    }
+
+    @Override
+    public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
+        if (comboBoxPathChooser.getSelectedIndex() != -1 &&
+                !((JTextComponent) (comboBoxPathChooser).
+                        getEditor().getEditorComponent()).getText().isEmpty()) {
             enterPressed(table);
         }
     }
 
+    @Override
+    public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
+    }
+
+    @Override
+    public void popupMenuCanceled(PopupMenuEvent e) {
+    }
+
     private final class PathChooserComboBoxCellRenderer extends DefaultListCellRenderer {
 
         private  final ImageIcon rightArrow = ModelerUtil.buildIcon("scroll_right.gif");
 
+        @SuppressWarnings("unchecked")
         @Override
         public Component getListCellRendererComponent(JList<?> list, Object value, int index,
                                                       boolean isSelected, boolean cellHasFocus) {

http://git-wip-us.apache.org/repos/asf/cayenne/blob/c81cb742/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/WidgetFactory.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/WidgetFactory.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/WidgetFactory.java
index f258d6d..7cae4d8 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/WidgetFactory.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/WidgetFactory.java
@@ -37,22 +37,22 @@ public interface WidgetFactory {
     /**
      * Creates a new JComboBox with a collection of model objects.
      */
-    JComboBox createComboBox(Collection<String> model, boolean sort);
+    JComboBox<String> createComboBox(Collection<String> model, boolean sort);
 
     /**
      * Creates a new JComboBox with an array of model objects.
      */
-    JComboBox createComboBox(Object[] model, boolean sort);
+    <E> JComboBox<E> createComboBox(E[] model, boolean sort);
 
     /**
      * Creates a new JComboBox.
      */
-    JComboBox createComboBox();
+    <E> JComboBox<E> createComboBox();
 
     /**
      * Creates undoable JComboBox.
      */
-    JComboBox createUndoableComboBox();
+    <E> JComboBox<E> createUndoableComboBox();
 
     /**
      * Creates cell editor for text field
@@ -65,7 +65,7 @@ public interface WidgetFactory {
      * 
      * @param combo JComboBox to be used as editor component
      */
-    TableCellEditor createCellEditor(JComboBox combo);
+    TableCellEditor createCellEditor(JComboBox<?> combo);
 
     /**
      * Creates and returns a JEdit text component with syntax highlighing


[2/4] cayenne git commit: Merge branch 'master' into modeler-small-fixes

Posted by sk...@apache.org.
Merge branch 'master' into modeler-small-fixes


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

Branch: refs/heads/master
Commit: d2f440440249eada0dd5bac6eb5882a4bd8516a1
Parents: c81cb74 5708e35
Author: Nikita Timofeev <st...@gmail.com>
Authored: Tue Nov 15 14:30:50 2016 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Tue Nov 15 14:30:50 2016 +0300

----------------------------------------------------------------------
 assembly/pom.xml | 15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)
----------------------------------------------------------------------



[3/4] cayenne git commit: Update query name validator to check names across all data maps MappingCache skip query descriptor name uniqueness check Small code clean up

Posted by sk...@apache.org.
Update query name validator to check names across all data maps
MappingCache skip query descriptor name uniqueness check
Small code clean up


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

Branch: refs/heads/master
Commit: eeebf0087779d1f1d7140eb51fdfba7aaf3136a9
Parents: d2f4404
Author: Nikita Timofeev <st...@gmail.com>
Authored: Tue Nov 15 15:27:51 2016 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Tue Nov 15 15:27:51 2016 +0300

----------------------------------------------------------------------
 .../project/validation/BaseQueryValidator.java  | 86 ++++++++++++++++++++
 .../validation/ProcedureQueryValidator.java     | 35 +-------
 .../validation/SQLTemplateValidator.java        | 29 +------
 .../validation/SelectQueryValidator.java        | 32 +-------
 .../org/apache/cayenne/map/MappingCache.java    | 38 ++-------
 .../modeler/CayenneModelerController.java       | 20 ++---
 .../modeler/FileClassLoadingService.java        | 10 +--
 .../ChangeObjEntityListenerClassAction.java     |  1 +
 .../cayenne/modeler/graph/DbGraphBuilder.java   |  5 ++
 9 files changed, 120 insertions(+), 136 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cayenne/blob/eeebf008/cayenne-project/src/main/java/org/apache/cayenne/project/validation/BaseQueryValidator.java
----------------------------------------------------------------------
diff --git a/cayenne-project/src/main/java/org/apache/cayenne/project/validation/BaseQueryValidator.java b/cayenne-project/src/main/java/org/apache/cayenne/project/validation/BaseQueryValidator.java
new file mode 100644
index 0000000..2c73270
--- /dev/null
+++ b/cayenne-project/src/main/java/org/apache/cayenne/project/validation/BaseQueryValidator.java
@@ -0,0 +1,86 @@
+/*****************************************************************
+ *   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.project.validation;
+
+import org.apache.cayenne.configuration.DataChannelDescriptor;
+import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.QueryDescriptor;
+import org.apache.cayenne.util.Util;
+import org.apache.cayenne.validation.ValidationResult;
+
+
+/**
+ * Base validation for all query types
+ */
+class BaseQueryValidator extends ConfigurationNodeValidator {
+
+    void validateName(QueryDescriptor query, ValidationResult validationResult) {
+        final String name = query.getName();
+
+        // Must have name
+        if (Util.isEmptyString(name)) {
+            addFailure(validationResult, query, "Unnamed " + query.getType());
+            return;
+        }
+
+        DataMap map = query.getDataMap();
+        if (map == null) {
+            return;
+        }
+
+        // check for duplicate names in the parent context
+        if(hasDuplicateQueryDescriptorInDataMap(query, map)) {
+            addFailure(validationResult, query, "Duplicate query name: %s", name);
+            return;
+        }
+
+        DataChannelDescriptor domain = query.getDataMap().getDataChannelDescriptor();
+        if (domain == null) {
+            return;
+        }
+
+        // check for duplicate names in sibling contexts
+        for (DataMap nextMap : domain.getDataMaps()) {
+            if (nextMap == map) {
+                continue;
+            }
+
+            if (hasDuplicateQueryDescriptorInDataMap(query, nextMap)) {
+                addFailure(validationResult, query,
+                        "Duplicate %s name in another DataMap: %s",
+                        query.getType(), name);
+                return;
+            }
+        }
+    }
+
+    private boolean hasDuplicateQueryDescriptorInDataMap(QueryDescriptor queryDescriptor, DataMap dataMap) {
+        for (final QueryDescriptor otherQuery : dataMap.getQueryDescriptors()) {
+            if (otherQuery == queryDescriptor) {
+                continue;
+            }
+
+            if (queryDescriptor.getName().equals(otherQuery.getName())) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+}

http://git-wip-us.apache.org/repos/asf/cayenne/blob/eeebf008/cayenne-project/src/main/java/org/apache/cayenne/project/validation/ProcedureQueryValidator.java
----------------------------------------------------------------------
diff --git a/cayenne-project/src/main/java/org/apache/cayenne/project/validation/ProcedureQueryValidator.java b/cayenne-project/src/main/java/org/apache/cayenne/project/validation/ProcedureQueryValidator.java
index 9f031a5..4cac694 100644
--- a/cayenne-project/src/main/java/org/apache/cayenne/project/validation/ProcedureQueryValidator.java
+++ b/cayenne-project/src/main/java/org/apache/cayenne/project/validation/ProcedureQueryValidator.java
@@ -21,11 +21,9 @@ package org.apache.cayenne.project.validation;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.Procedure;
 import org.apache.cayenne.map.ProcedureQueryDescriptor;
-import org.apache.cayenne.map.QueryDescriptor;
-import org.apache.cayenne.util.Util;
 import org.apache.cayenne.validation.ValidationResult;
 
-class ProcedureQueryValidator extends ConfigurationNodeValidator {
+class ProcedureQueryValidator extends BaseQueryValidator {
 
     void validate(ProcedureQueryDescriptor query, ValidationResult validationResult) {
         validateName(query, validationResult);
@@ -70,35 +68,4 @@ class ProcedureQueryValidator extends ConfigurationNodeValidator {
             }
         }
     }
-
-    void validateName(QueryDescriptor query, ValidationResult validationResult) {
-        String name = query.getName();
-
-        // Must have name
-        if (Util.isEmptyString(name)) {
-            addFailure(validationResult, query, "Unnamed ProcedureQuery");
-            return;
-        }
-
-        DataMap map = query.getDataMap();
-        if (map == null) {
-            return;
-        }
-
-        // check for duplicate names in the parent context
-        for (final QueryDescriptor otherQuery : map.getQueryDescriptors()) {
-            if (otherQuery == query) {
-                continue;
-            }
-
-            if (name.equals(otherQuery.getName())) {
-                addFailure(
-                        validationResult,
-                        query,
-                        "Dulicate ProcedureQuery name: %s",
-                        name);
-                break;
-            }
-        }
-    }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/eeebf008/cayenne-project/src/main/java/org/apache/cayenne/project/validation/SQLTemplateValidator.java
----------------------------------------------------------------------
diff --git a/cayenne-project/src/main/java/org/apache/cayenne/project/validation/SQLTemplateValidator.java b/cayenne-project/src/main/java/org/apache/cayenne/project/validation/SQLTemplateValidator.java
index 8b55418..80e1cbe 100644
--- a/cayenne-project/src/main/java/org/apache/cayenne/project/validation/SQLTemplateValidator.java
+++ b/cayenne-project/src/main/java/org/apache/cayenne/project/validation/SQLTemplateValidator.java
@@ -26,7 +26,7 @@ import org.apache.cayenne.validation.ValidationResult;
 
 import java.util.Map;
 
-class SQLTemplateValidator extends ConfigurationNodeValidator {
+class SQLTemplateValidator extends BaseQueryValidator {
 
     void validate(SQLTemplateDescriptor query, ValidationResult validationResult) {
         validateName(query, validationResult);
@@ -63,31 +63,4 @@ class SQLTemplateValidator extends ConfigurationNodeValidator {
                     query.getName());
         }
     }
-
-    void validateName(QueryDescriptor query, ValidationResult validationResult) {
-        String name = query.getName();
-
-        // Must have name
-        if (Util.isEmptyString(name)) {
-            addFailure(validationResult, query, "Unnamed SQLTemplate");
-            return;
-        }
-
-        DataMap map = query.getDataMap();
-        if (map == null) {
-            return;
-        }
-
-        // check for duplicate names in the parent context
-        for (final QueryDescriptor otherQuery : map.getQueryDescriptors()) {
-            if (otherQuery == query) {
-                continue;
-            }
-
-            if (name.equals(otherQuery.getName())) {
-                addFailure(validationResult, query, "Duplicate query name: %s", name);
-                break;
-            }
-        }
-    }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/eeebf008/cayenne-project/src/main/java/org/apache/cayenne/project/validation/SelectQueryValidator.java
----------------------------------------------------------------------
diff --git a/cayenne-project/src/main/java/org/apache/cayenne/project/validation/SelectQueryValidator.java b/cayenne-project/src/main/java/org/apache/cayenne/project/validation/SelectQueryValidator.java
index c0bb5bc..f9c0843 100644
--- a/cayenne-project/src/main/java/org/apache/cayenne/project/validation/SelectQueryValidator.java
+++ b/cayenne-project/src/main/java/org/apache/cayenne/project/validation/SelectQueryValidator.java
@@ -26,12 +26,11 @@ import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.Entity;
 import org.apache.cayenne.map.QueryDescriptor;
 import org.apache.cayenne.map.SelectQueryDescriptor;
-import org.apache.cayenne.query.*;
+import org.apache.cayenne.query.Ordering;
 import org.apache.cayenne.util.CayenneMapEntry;
-import org.apache.cayenne.util.Util;
 import org.apache.cayenne.validation.ValidationResult;
 
-class SelectQueryValidator extends ConfigurationNodeValidator {
+class SelectQueryValidator extends BaseQueryValidator {
 
     void validate(SelectQueryDescriptor query, ValidationResult validationResult) {
 
@@ -126,31 +125,4 @@ class SelectQueryValidator extends ConfigurationNodeValidator {
         return null;
     }
 
-    void validateName(QueryDescriptor query, ValidationResult validationResult) {
-        String name = query.getName();
-
-        // Must have name
-        if (Util.isEmptyString(name)) {
-            addFailure(validationResult, query, "Unnamed SelectQuery");
-            return;
-        }
-
-        DataMap map = query.getDataMap();
-        if (map == null) {
-            return;
-        }
-
-        // check for duplicate names in the parent context
-
-        for (final QueryDescriptor otherQuery : map.getQueryDescriptors()) {
-            if (otherQuery == query) {
-                continue;
-            }
-
-            if (name.equals(otherQuery.getName())) {
-                addFailure(validationResult, query, "Duplicate query name: %s", name);
-                break;
-            }
-        }
-    }
 }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/eeebf008/cayenne-server/src/main/java/org/apache/cayenne/map/MappingCache.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/map/MappingCache.java b/cayenne-server/src/main/java/org/apache/cayenne/map/MappingCache.java
index 8c7f8c2..ad4bc89 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/map/MappingCache.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/map/MappingCache.java
@@ -69,23 +69,17 @@ class MappingCache implements MappingNamespace {
 
         // index DbEntities separately and before ObjEntities to avoid infinite
         // loops when looking up DbEntities during ObjEntity index op
-
         for (DataMap map : maps) {
-            for (DbEntity de : map.getDbEntities()) {
-                dbEntities.put(de.getName(), de);
-            }
+            dbEntities.putAll(map.getDbEntityMap());
         }
 
         for (DataMap map : maps) {
+            // index ObjEntities by name
+            objEntities.putAll(map.getObjEntityMap());
 
-            // index ObjEntities
+            // index ObjEntities by class name
             for (ObjEntity oe : map.getObjEntities()) {
-
-                // index by name
-                objEntities.put(oe.getName(), oe);
-
-                // index by class.. use class name as a key to avoid class
-                // loading here...
+                // use class name as a key to avoid class loading here...
                 String className = oe.getJavaClassName();
                 if (className == null) {
                     continue;
@@ -94,35 +88,21 @@ class MappingCache implements MappingNamespace {
                 // allow duplicates, but put a special marker indicating
                 // that this entity can't be looked up by class
                 Object existing = objEntitiesByClassName.get(className);
-                if (existing != null) {
-
-                    if (existing != OBJ_DUPLICATE_MARKER) {
-                        objEntitiesByClassName.put(className, OBJ_DUPLICATE_MARKER);
-                    }
+                if (existing != null && existing != OBJ_DUPLICATE_MARKER) {
+                    objEntitiesByClassName.put(className, OBJ_DUPLICATE_MARKER);
                 } else {
                     objEntitiesByClassName.put(className, oe);
                 }
             }
 
             // index stored procedures
-            for (Procedure proc : map.getProcedures()) {
-                procedures.put(proc.getName(), proc);
-            }
+            procedures.putAll(map.getProcedureMap());
 
             // index embeddables
             embeddables.putAll(map.getEmbeddableMap());
 
             // index query descriptors
-            for (QueryDescriptor queryDescriptor : map.getQueryDescriptors()) {
-                String name = queryDescriptor.getName();
-                QueryDescriptor existingQueryDescriptor = queryDesriptors.put(name, queryDescriptor);
-
-                // No exception is thrown in case of any other entity's name conflict.
-                // Why do we throw it here!?
-//                if (existingQueryDescriptor != null && queryDescriptor != existingQueryDescriptor) {
-//                    throw new CayenneRuntimeException("More than one QueryDescriptor for name: " + name);
-//                }
-            }
+            queryDesriptors.putAll(map.getQueryDescriptorMap());
         }
 
         // restart the map iterator to index inheritance

http://git-wip-us.apache.org/repos/asf/cayenne/blob/eeebf008/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java
index b7a84b0..30fdebc 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/CayenneModelerController.java
@@ -140,12 +140,13 @@ public class CayenneModelerController extends CayenneController {
         geometry.bind(frame, 650, 550, 0);
     }
 
+
+    @SuppressWarnings("unchecked")
     private boolean processDropAction(Transferable transferable) {
         List<File> fileList;
         try {
-            fileList = (List) transferable.getTransferData(DataFlavor.javaFileListFlavor);
-        }
-        catch (Exception e) {
+            fileList = (List<File>) transferable.getTransferData(DataFlavor.javaFileListFlavor);
+        } catch (Exception e) {
             return false;
         }
 
@@ -260,7 +261,7 @@ public class CayenneModelerController extends CayenneController {
 
         // for validation purposes combine load failures with post-load validation (not
         // sure if that'll cause duplicate messages?).
-        List<ValidationFailure> allFailures = new ArrayList<ValidationFailure>();
+        List<ValidationFailure> allFailures = new ArrayList<>();
         Collection<ValidationFailure> loadFailures = project
                 .getConfigurationTree()
                 .getLoadFailures();
@@ -305,14 +306,13 @@ public class CayenneModelerController extends CayenneController {
 
         try {
             frefLastProjFiles.clear();
-        }
-        catch (BackingStoreException e) {
+        } catch (BackingStoreException ignored) {
             // ignore exception
         }
         int size = arr.size();
 
         for (int i = 0; i < size; i++) {
-            frefLastProjFiles.put(String.valueOf(i), arr.get(i).toString());
+            frefLastProjFiles.put(String.valueOf(i), arr.get(i));
         }
     }
 
@@ -331,10 +331,10 @@ public class CayenneModelerController extends CayenneController {
 
     class ExpireThread extends Thread {
 
-        protected int seconds;
+        int seconds;
         protected String message;
 
-        public ExpireThread(String message, int seconds) {
+        ExpireThread(String message, int seconds) {
             this.seconds = seconds;
             this.message = message;
         }
@@ -380,7 +380,7 @@ public class CayenneModelerController extends CayenneController {
         int size = arr.size();
 
         for (int i = 0; i < size; i++) {
-            frefLastProjFiles.put(String.valueOf(i), arr.get(i).toString());
+            frefLastProjFiles.put(String.valueOf(i), arr.get(i));
         }
 
         getLastDirectory().setDirectory(new File(newPath));

http://git-wip-us.apache.org/repos/asf/cayenne/blob/eeebf008/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/FileClassLoadingService.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/FileClassLoadingService.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/FileClassLoadingService.java
index 2827405..f834378 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/FileClassLoadingService.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/FileClassLoadingService.java
@@ -36,17 +36,17 @@ import java.util.List;
 public class FileClassLoadingService implements ClassLoadingService {
 
     private FileClassLoader classLoader;
-    protected List<File> pathFiles;
+    private List<File> pathFiles;
 
     public FileClassLoadingService() {
-        this.pathFiles = new ArrayList<File>(15);
+        this.pathFiles = new ArrayList<>(15);
     }
 
     /**
      * Returns class for a given name, loading it if needed from configured
      * locations.
      */
-    @SuppressWarnings("all")
+    @SuppressWarnings("unchecked")
     public <T> Class<T> loadClass(Class<T> interfaceType, String className) throws ClassNotFoundException {
         return (Class<T>) nonNullClassLoader().loadClass(className);
     }
@@ -106,7 +106,7 @@ public class FileClassLoadingService implements ClassLoadingService {
     }
 
     // URLClassLoader with addURL method exposed.
-    static class FileClassLoader extends URLClassLoader {
+    private static class FileClassLoader extends URLClassLoader {
 
         FileClassLoader(ClassLoader parent) {
             super(new URL[0], parent);
@@ -119,7 +119,7 @@ public class FileClassLoadingService implements ClassLoadingService {
                 // I guess here we have to quetly ignore invalid URLs...
                 try {
                     addURL(file.toURI().toURL());
-                } catch (MalformedURLException ex) {
+                } catch (MalformedURLException ignored) {
                 }
             }
         }

http://git-wip-us.apache.org/repos/asf/cayenne/blob/eeebf008/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ChangeObjEntityListenerClassAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ChangeObjEntityListenerClassAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ChangeObjEntityListenerClassAction.java
index d7d44fa..c06c017 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ChangeObjEntityListenerClassAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/ChangeObjEntityListenerClassAction.java
@@ -32,6 +32,7 @@ import org.apache.cayenne.modeler.util.CayenneAction;
  * Action class for renaming entity listener class for ObjEntity
  *
  * @version 1.0 Oct 30, 2007
+ * @deprecated
  */
 public class ChangeObjEntityListenerClassAction extends CayenneAction {
     /**

http://git-wip-us.apache.org/repos/asf/cayenne/blob/eeebf008/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/DbGraphBuilder.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/DbGraphBuilder.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/DbGraphBuilder.java
index 6a320e3..5e6ffd6 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/DbGraphBuilder.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/DbGraphBuilder.java
@@ -22,6 +22,7 @@ import java.awt.Color;
 import java.util.Collection;
 
 import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.DetectedDbEntity;
 import org.apache.cayenne.map.Entity;
 import org.apache.cayenne.map.Relationship;
 import org.apache.cayenne.map.event.AttributeEvent;
@@ -90,6 +91,10 @@ class DbGraphBuilder extends BaseGraphBuilder implements DbEntityListener,
     }
 
     public void dbEntityAdded(EntityEvent e) {
+        // skip new entities from DbLoader
+        if(e.getEntity() instanceof DetectedDbEntity) {
+            return;
+        }
         insertEntityCell(e.getEntity());
     }
 


[4/4] cayenne git commit: Merge branch '132'

Posted by sk...@apache.org.
Merge branch '132'


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

Branch: refs/heads/master
Commit: e308a16f7b761d50c7529459609e562075c8dda4
Parents: 74e5e2f eeebf00
Author: Savva Kolbachev <s....@gmail.com>
Authored: Wed Nov 16 21:47:15 2016 +0300
Committer: Savva Kolbachev <s....@gmail.com>
Committed: Wed Nov 16 21:47:15 2016 +0300

----------------------------------------------------------------------
 .../naming/DefaultObjectNameGenerator.java      |  4 +
 .../project/validation/BaseQueryValidator.java  | 86 ++++++++++++++++++++
 .../validation/ProcedureQueryValidator.java     | 35 +-------
 .../validation/SQLTemplateValidator.java        | 29 +------
 .../validation/SelectQueryValidator.java        | 32 +-------
 .../org/apache/cayenne/map/MappingCache.java    | 36 ++------
 .../modeler/CayenneModelerController.java       | 20 ++---
 .../modeler/FileClassLoadingService.java        | 10 +--
 .../ChangeObjEntityListenerClassAction.java     |  1 +
 .../cayenne/modeler/graph/DbGraphBuilder.java   |  5 ++
 .../modeler/util/DefaultWidgetFactory.java      | 20 ++---
 .../util/PathChooserComboBoxCellEditor.java     | 37 +++++++--
 .../cayenne/modeler/util/WidgetFactory.java     | 10 +--
 13 files changed, 168 insertions(+), 157 deletions(-)
----------------------------------------------------------------------