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 2017/01/23 15:08:17 UTC
cayenne git commit: CAY-2185 partial fix plus refactoring and cleanup
of FindAction and related classes
Repository: cayenne
Updated Branches:
refs/heads/master 0cd154d42 -> c24bb767e
CAY-2185 partial fix plus refactoring and cleanup of FindAction and related classes
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/c24bb767
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/c24bb767
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/c24bb767
Branch: refs/heads/master
Commit: c24bb767ecdab5860bc3606711f73f7ee805d31e
Parents: 0cd154d
Author: Nikita Timofeev <st...@gmail.com>
Authored: Mon Jan 23 18:07:37 2017 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Mon Jan 23 18:07:37 2017 +0300
----------------------------------------------------------------------
.../cayenne/modeler/ProjectTreeFactory.java | 2 +-
.../cayenne/modeler/action/FindAction.java | 418 +++++++++++++------
.../cayenne/modeler/dialog/FindDialog.java | 389 ++---------------
.../cayenne/modeler/dialog/FindDialogView.java | 189 ++-------
.../modeler/event/AttributeDisplayEvent.java | 20 +-
.../cayenne/modeler/graph/BaseGraphBuilder.java | 6 +-
.../graph/action/EntityDisplayAction.java | 28 +-
.../cayenne/swing/ImageRendererColumn.java | 26 +-
8 files changed, 384 insertions(+), 694 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/c24bb767/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectTreeFactory.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectTreeFactory.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectTreeFactory.java
index 4fec9c6..88aabba 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectTreeFactory.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ProjectTreeFactory.java
@@ -51,7 +51,7 @@ public class ProjectTreeFactory {
private LinkedList<DefaultMutableTreeNode> stack;
TreeWrapper() {
- stack = new LinkedList<DefaultMutableTreeNode>();
+ stack = new LinkedList<>();
}
private <T extends Comparable<T>> Collection<T> sort(Collection<T> unsorted) {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/c24bb767/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/FindAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/FindAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/FindAction.java
index 05ca95d..068c737 100755
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/FindAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/action/FindAction.java
@@ -19,30 +19,61 @@
package org.apache.cayenne.modeler.action;
import org.apache.cayenne.configuration.DataChannelDescriptor;
+import org.apache.cayenne.map.Attribute;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.map.DbRelationship;
import org.apache.cayenne.map.Embeddable;
import org.apache.cayenne.map.EmbeddableAttribute;
+import org.apache.cayenne.map.Entity;
import org.apache.cayenne.map.ObjAttribute;
import org.apache.cayenne.map.ObjEntity;
import org.apache.cayenne.map.ObjRelationship;
+import org.apache.cayenne.map.Relationship;
import org.apache.cayenne.modeler.Application;
+import org.apache.cayenne.modeler.CayenneModelerFrame;
+import org.apache.cayenne.modeler.ProjectTreeModel;
+import org.apache.cayenne.modeler.ProjectTreeView;
import org.apache.cayenne.modeler.dialog.FindDialog;
+import org.apache.cayenne.modeler.editor.EditorView;
+import org.apache.cayenne.modeler.event.AttributeDisplayEvent;
+import org.apache.cayenne.modeler.event.EmbeddableAttributeDisplayEvent;
+import org.apache.cayenne.modeler.event.EmbeddableDisplayEvent;
+import org.apache.cayenne.modeler.event.EntityDisplayEvent;
+import org.apache.cayenne.modeler.event.QueryDisplayEvent;
+import org.apache.cayenne.modeler.event.RelationshipDisplayEvent;
import org.apache.cayenne.modeler.util.CayenneAction;
import org.apache.cayenne.map.QueryDescriptor;
import javax.swing.JTextField;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.TreePath;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.regex.Matcher;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import java.util.regex.Pattern;
public class FindAction extends CayenneAction {
- private java.util.List<Object> paths;
+
+ /**
+ * Result sort priority based on result type
+ */
+ private static final Map<Class<?>, Integer> PRIORITY_BY_TYPE = new HashMap<>();
+ static {
+ PRIORITY_BY_TYPE.put(ObjEntity.class, 1);
+ PRIORITY_BY_TYPE.put(DbEntity.class, 2);
+ PRIORITY_BY_TYPE.put(ObjAttribute.class, 5);
+ PRIORITY_BY_TYPE.put(DbAttribute.class, 6);
+ PRIORITY_BY_TYPE.put(ObjRelationship.class, 7);
+ PRIORITY_BY_TYPE.put(DbRelationship.class, 8);
+ PRIORITY_BY_TYPE.put(QueryDescriptor.class, 9);
+ PRIORITY_BY_TYPE.put(Embeddable.class, 10);
+ }
public static String getActionName() {
return "Find";
@@ -54,144 +85,277 @@ public class FindAction extends CayenneAction {
/**
* All entities that contain a pattern substring (case-indifferent) in the name are produced.
- * @param e
*/
public void performAction(ActionEvent e) {
JTextField source = (JTextField) e.getSource();
- String sourceStr = source.getText().trim();
+ String searchStr = source.getText().trim();
+ if (searchStr.startsWith("*")) {
+ searchStr = searchStr.substring(1);
+ }
+
+ if(searchStr.isEmpty()) {
+ markEmptySearch(source);
+ return;
+ }
+
+ List<SearchResultEntry> searchResults = search(searchStr);
+ if(searchResults.isEmpty()){
+ markEmptySearch(source);
+ } else if(searchResults.size() == 1){
+ jumpToResult(searchResults.iterator().next());
+ } else {
+ new FindDialog(getApplication().getFrameController(), searchResults).startupAction();
+ }
+ }
+
+ private void markEmptySearch(JTextField source) {
+ source.setBackground(Color.pink);
+ }
+
+ /**
+ * Navigate to search result
+ * Used also in {@link org.apache.cayenne.modeler.graph.action.EntityDisplayAction}
+ */
+ public static void jumpToResult(FindAction.SearchResultEntry searchResultEntry) {
+ EditorView editor = ((CayenneModelerFrame) Application.getInstance().getFrameController().getView()).getView();
+ DataChannelDescriptor domain = (DataChannelDescriptor) Application.getInstance().getProject().getRootNode();
+
+ if (searchResultEntry.getObject() instanceof Entity) {
+ jumpToEntityResult((Entity) searchResultEntry.getObject(), editor, domain);
+ } else if (searchResultEntry.getObject() instanceof QueryDescriptor) {
+ jumpToQueryResult((QueryDescriptor)searchResultEntry.getObject(), editor, domain);
+ } else if (searchResultEntry.getObject() instanceof Embeddable) {
+ jumpToEmbeddableResult((Embeddable)searchResultEntry.getObject(), editor, domain);
+ } else if (searchResultEntry.getObject() instanceof EmbeddableAttribute) {
+ jumpToEmbeddableAttributeResult((EmbeddableAttribute)searchResultEntry.getObject(), editor, domain);
+ } else if (searchResultEntry.getObject() instanceof Attribute || searchResultEntry.getObject() instanceof Relationship) {
+ jumpToAttributeResult(searchResultEntry, editor, domain);
+ }
+ }
+
+ private List<SearchResultEntry> search(String searchStr) {
+ Pattern pattern = Pattern.compile(searchStr, Pattern.CASE_INSENSITIVE);
+ List<SearchResultEntry> result = new ArrayList<>();
+ for (DataMap dataMap : ((DataChannelDescriptor) getProjectController().getProject().getRootNode()).getDataMaps()) {
+ searchInQueryDescriptors(pattern, result, dataMap);
+ searchInEmbeddables(pattern, result, dataMap);
+ searchInDbEntities(pattern, result, dataMap);
+ searchInObjEntities(pattern, result, dataMap);
+ }
+ Collections.sort(result);
+ return result;
+ }
+
+ private void searchInQueryDescriptors(Pattern pattern, List<SearchResultEntry> result, DataMap dataMap) {
+ for (QueryDescriptor q : dataMap.getQueryDescriptors()) {
+ if (match(q.getName(), pattern)) {
+ result.add(new SearchResultEntry(q, q.getName()));
+ }
+ }
+ }
- paths = new ArrayList<>();
- if (sourceStr != null && !sourceStr.isEmpty()) {
+ private void searchInEmbeddables(Pattern pattern, List<SearchResultEntry> result, DataMap dataMap) {
+ for (Embeddable emb : dataMap.getEmbeddables()) {
+ if (match(emb.getClassName(), pattern)) {
+ result.add(new SearchResultEntry(emb, emb.getClassName()));
+ }
+ for (EmbeddableAttribute attr : emb.getAttributes()) {
+ if (match(attr.getName(), pattern)) {
+ result.add(new SearchResultEntry(attr, emb.getClassName() + "." + attr.getName()));
+ }
+ }
+ }
+ }
- if (sourceStr.startsWith("*")) {
- sourceStr = sourceStr.substring(1);
+ private void searchInObjEntities(Pattern pattern, List<SearchResultEntry> result, DataMap dataMap) {
+ for (ObjEntity ent : dataMap.getObjEntities()) {
+ if (match(ent.getName(), pattern)) {
+ result.add(new SearchResultEntry(ent, ent.getName()));
}
+ for (ObjAttribute attr : ent.getAttributes()) {
+ if (match(attr.getName(), pattern)) {
+ result.add(new SearchResultEntry(attr, ent.getName() + "." + attr.getName()));
+ }
+ }
+ for (ObjRelationship rel : ent.getRelationships()) {
+ if (match(rel.getName(), pattern)) {
+ result.add(new SearchResultEntry(rel, ent.getName() + "." + rel.getName()));
+ }
+ }
+ }
+ }
- Pattern pattern = Pattern.compile(sourceStr, Pattern.CASE_INSENSITIVE);
-
- Iterator<DataMap> it = ((DataChannelDescriptor)getProjectController().getProject().getRootNode()).getDataMaps().iterator();
-
- while(it.hasNext()) {
-
- DataMap dm = it.next();
-
- Iterator<QueryDescriptor> querIterator = dm.getQueryDescriptors().iterator();
-
- while(querIterator.hasNext()) {
- QueryDescriptor q = querIterator.next();
- if(matchFound(q.getName(), pattern)){
- paths.add(q);
- }
- }
-
- Iterator<Embeddable> embIterator = dm.getEmbeddables().iterator();
-
- while(embIterator.hasNext()) {
- Embeddable emb = embIterator.next();
- if(matchFound(emb.getClassName(), pattern)){
- paths.add(emb);
- }
-
- Iterator<EmbeddableAttribute> attrIterator = emb.getAttributes().iterator();
-
- while(attrIterator.hasNext()) {
- EmbeddableAttribute attr = attrIterator.next();
- if(matchFound(attr.getName(), pattern)){
- paths.add(attr);
- }
- }
- }
-
-
- Iterator<DbEntity> dbEntIterator = dm.getDbEntities().iterator();
-
- while(dbEntIterator.hasNext()) {
- DbEntity ent = dbEntIterator.next();
- if(matchFound(ent.getName(), pattern)){
- paths.add(ent);
- }
-
- Iterator<DbAttribute> attrIterator = ent.getAttributes().iterator();
-
- while(attrIterator.hasNext()) {
- DbAttribute attr = attrIterator.next();
- if(matchFound(attr.getName(), pattern)){
- paths.add(attr);
- }
- }
-
- Iterator<DbRelationship> relIterator = ent.getRelationships().iterator();
-
- while(relIterator.hasNext()) {
- DbRelationship rel = relIterator.next();
- if(matchFound(rel.getName(), pattern)){
- paths.add(rel);
- }
- }
-
- String catalog = ent.getCatalog();
- if (catalog != null && !catalog.isEmpty()) {
- if(matchFound(catalog, pattern) && !paths.contains(ent)){
- paths.add(ent);
- }
- }
-
- String schema = ent.getSchema();
- if (schema != null && !schema.isEmpty()) {
- if(matchFound(schema, pattern) && !paths.contains(ent)){
- paths.add(ent);
- }
- }
-
- }
-
- Iterator<ObjEntity> entIterator = dm.getObjEntities().iterator();
-
- while(entIterator.hasNext()) {
- ObjEntity ent = entIterator.next();
- if(matchFound(ent.getName(), pattern)){
- paths.add(ent);
- }
-
- Iterator<ObjAttribute> attrIterator = ent.getAttributes().iterator();
-
- while(attrIterator.hasNext()) {
- ObjAttribute attr = attrIterator.next();
- if(matchFound(attr.getName(), pattern)){
- paths.add(attr);
- }
- }
-
- Iterator<ObjRelationship> relIterator = ent.getRelationships().iterator();
-
- while(relIterator.hasNext()) {
- ObjRelationship rel = relIterator.next();
- if(matchFound(rel.getName(), pattern)){
- paths.add(rel);
- }
- }
- }
+ private void searchInDbEntities(Pattern pattern, List<SearchResultEntry> result, DataMap dataMap) {
+ for (DbEntity ent : dataMap.getDbEntities()) {
+ if (match(ent.getName(), pattern)) {
+ result.add(new SearchResultEntry(ent, ent.getName()));
+ }
+ for (DbAttribute attr : ent.getAttributes()) {
+ if (match(attr.getName(), pattern)) {
+ result.add(new SearchResultEntry(attr, ent.getName() + "." + attr.getName()));
+ }
}
+ for (DbRelationship rel : ent.getRelationships()) {
+ if (match(rel.getName(), pattern)) {
+ result.add(new SearchResultEntry(rel, ent.getName() + "." + rel.getName()));
+ }
+ }
+
+ checkCatalogOrSchema(pattern, result, ent, ent.getCatalog());
+ checkCatalogOrSchema(pattern, result, ent, ent.getSchema());
}
-
- if(paths.size()==0){
- source.setBackground(Color.pink);
- } else if(paths.size()!=1){
- new FindDialog(getApplication().getFrameController(), paths).startupAction();
+ }
+
+ private void checkCatalogOrSchema(Pattern pattern, List<SearchResultEntry> paths, DbEntity ent, String catalogOrSchema) {
+ if (catalogOrSchema != null && !catalogOrSchema.isEmpty()) {
+ if (match(catalogOrSchema, pattern)) {
+ SearchResultEntry entry = new SearchResultEntry(ent, ent.getName());
+ if(!paths.contains(entry)) {
+ paths.add(entry);
+ }
+ }
+ }
+ }
+
+ private boolean match(String entityName, Pattern pattern) {
+ return pattern.matcher(entityName).find();
+ }
+
+ private static void jumpToAttributeResult(SearchResultEntry searchResultEntry, EditorView editor, DataChannelDescriptor domain) {
+ DataMap map;
+ Entity entity;
+ if (searchResultEntry.getObject() instanceof Attribute) {
+ map = ((Attribute) searchResultEntry.getObject()).getEntity().getDataMap();
+ entity = ((Attribute) searchResultEntry.getObject()).getEntity();
} else {
-
- Iterator it = paths.iterator();
- if (it.hasNext()) {
- Object path = it.next();
- FindDialog.jumpToResult(path);
- }
+ map = ((Relationship) searchResultEntry.getObject()).getSourceEntity().getDataMap();
+ entity = ((Relationship) searchResultEntry.getObject()).getSourceEntity();
}
+ buildAndSelectTreePath(map, entity, editor);
+
+ if (searchResultEntry.getObject() instanceof Attribute) {
+ AttributeDisplayEvent event = new AttributeDisplayEvent(editor.getProjectTreeView(),
+ (Attribute) searchResultEntry.getObject(), entity, map, domain);
+ event.setMainTabFocus(true);
+ if(searchResultEntry.getObject() instanceof DbAttribute) {
+ editor.getDbDetailView().currentDbAttributeChanged(event);
+ } else {
+ editor.getObjDetailView().currentObjAttributeChanged(event);
+ }
+ } else if (searchResultEntry.getObject() instanceof Relationship) {
+ RelationshipDisplayEvent event = new RelationshipDisplayEvent(editor.getProjectTreeView(),
+ (Relationship) searchResultEntry.getObject(), entity, map, domain);
+ event.setMainTabFocus(true);
+ if(searchResultEntry.getObject() instanceof DbRelationship) {
+ editor.getDbDetailView().currentDbRelationshipChanged(event);
+ } else {
+ editor.getObjDetailView().currentObjRelationshipChanged(event);
+ }
+ }
+ }
+
+ private static void jumpToEmbeddableAttributeResult(EmbeddableAttribute attribute, EditorView editor, DataChannelDescriptor domain) {
+ Embeddable embeddable = attribute.getEmbeddable();
+ DataMap map = embeddable.getDataMap();
+ buildAndSelectTreePath(map, embeddable, editor);
+ EmbeddableAttributeDisplayEvent event = new EmbeddableAttributeDisplayEvent(editor.getProjectTreeView(),
+ embeddable, attribute, map, domain);
+ event.setMainTabFocus(true);
+ editor.getEmbeddableView().currentEmbeddableAttributeChanged(event);
+ }
+
+ private static void jumpToEmbeddableResult(Embeddable embeddable, EditorView editor, DataChannelDescriptor domain) {
+ DataMap map = embeddable.getDataMap();
+ buildAndSelectTreePath(map, embeddable, editor);
+ EmbeddableDisplayEvent event = new EmbeddableDisplayEvent(editor.getProjectTreeView(), embeddable, map, domain);
+ event.setMainTabFocus(true);
+ editor.currentEmbeddableChanged(event);
+ }
+
+ private static void jumpToQueryResult(QueryDescriptor queryDescriptor, EditorView editor, DataChannelDescriptor domain) {
+ DataMap map = queryDescriptor.getDataMap();
+ buildAndSelectTreePath(map, queryDescriptor, editor);
+ QueryDisplayEvent event = new QueryDisplayEvent(editor.getProjectTreeView(), queryDescriptor, map, domain);
+ editor.currentQueryChanged(event);
}
- private boolean matchFound(String entityName, Pattern pattern) {
- Matcher m = pattern.matcher(entityName);
+ private static void jumpToEntityResult(Entity entity, EditorView editor, DataChannelDescriptor domain) {
+ DataMap map = entity.getDataMap();
+ buildAndSelectTreePath(map, entity, editor);
+ EntityDisplayEvent event = new EntityDisplayEvent(editor.getProjectTreeView(), entity, map, domain);
+ event.setMainTabFocus(true);
- return m.find();
+ if (entity instanceof ObjEntity) {
+ editor.getObjDetailView().currentObjEntityChanged(event);
+ } else if (entity instanceof DbEntity) {
+ editor.getDbDetailView().currentDbEntityChanged(event);
+ }
}
+ /**
+ * Builds a tree path for a given path and make selection in it
+ */
+ private static TreePath buildAndSelectTreePath(DataMap map, Object object, EditorView editor) {
+ ProjectTreeView projectTreeView = editor.getProjectTreeView();
+ ProjectTreeModel treeModel = (ProjectTreeModel) projectTreeView.getModel();
+
+ DefaultMutableTreeNode[] mutableTreeNodes = new DefaultMutableTreeNode[] {
+ treeModel.getRootNode(),
+ treeModel.getNodeForObjectPath(new Object[]{map}),
+ treeModel.getNodeForObjectPath(new Object[]{map, object})
+ };
+
+ TreePath treePath = new TreePath(mutableTreeNodes);
+ if (!projectTreeView.isExpanded(treePath.getParentPath())) {
+ projectTreeView.expandPath(treePath.getParentPath());
+ }
+ projectTreeView.getSelectionModel().setSelectionPath(treePath);
+ return treePath;
+ }
+
+ /**
+ * Search result holder
+ */
+ public static class SearchResultEntry implements Comparable<SearchResultEntry>{
+ private final Object object;
+ private final String name;
+
+ public SearchResultEntry(Object object, String name) {
+ this.object = object;
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public Object getObject() {
+ return object;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ SearchResultEntry entry = (SearchResultEntry) o;
+ return name.equals(entry.name) && object.getClass().equals(entry.object.getClass());
+ }
+
+ @Override
+ public int hashCode() {
+ int result = object.getClass().hashCode();
+ result = 31 * result + name.hashCode();
+ return result;
+ }
+
+ @Override
+ public int compareTo(SearchResultEntry o) {
+ int res = PRIORITY_BY_TYPE.get(getObject().getClass())
+ - PRIORITY_BY_TYPE.get(o.getObject().getClass());
+ if(res != 0) {
+ return res;
+ }
+ return getName().compareTo(o.getName());
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/c24bb767/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/FindDialog.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/FindDialog.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/FindDialog.java
index 99fc743..e0e30e7 100755
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/FindDialog.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/FindDialog.java
@@ -18,38 +18,20 @@
****************************************************************/
package org.apache.cayenne.modeler.dialog;
-import org.apache.cayenne.configuration.DataChannelDescriptor;
-import org.apache.cayenne.map.*;
-import org.apache.cayenne.modeler.Application;
-import org.apache.cayenne.modeler.CayenneModelerFrame;
-import org.apache.cayenne.modeler.ProjectTreeModel;
-import org.apache.cayenne.modeler.ProjectTreeView;
-import org.apache.cayenne.modeler.editor.EditorView;
-import org.apache.cayenne.modeler.event.AttributeDisplayEvent;
-import org.apache.cayenne.modeler.event.EmbeddableAttributeDisplayEvent;
-import org.apache.cayenne.modeler.event.EmbeddableDisplayEvent;
-import org.apache.cayenne.modeler.event.EntityDisplayEvent;
-import org.apache.cayenne.modeler.event.QueryDisplayEvent;
-import org.apache.cayenne.modeler.event.RelationshipDisplayEvent;
+import org.apache.cayenne.modeler.action.FindAction;
import org.apache.cayenne.modeler.util.CayenneController;
-import org.apache.cayenne.query.*;
import javax.swing.JDialog;
-import javax.swing.JLabel;
import javax.swing.JTable;
-import javax.swing.tree.TreePath;
import java.awt.Component;
-import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
+import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
-import java.util.HashMap;
-import java.util.Iterator;
import java.util.List;
-import java.util.Map;
/**
* An instance of this class is responsible for displaying search results and navigating
@@ -58,93 +40,13 @@ import java.util.Map;
public class FindDialog extends CayenneController {
private FindDialogView view;
- private List paths;
- private static Font font;
- private static Font fontSelected;
+ private List<FindAction.SearchResultEntry> searchResults;
- public static Font getFont() {
- return font;
- }
-
- public static Font getFontSelected() {
- return fontSelected;
- }
-
- public FindDialog(CayenneController parent, List paths) {
+ public FindDialog(CayenneController parent, List<FindAction.SearchResultEntry> searchResults) {
super(parent);
- this.paths = paths;
-
- Map<Integer, String> objEntityNames = new HashMap<>();
- Map<Integer, String> dbEntityNames = new HashMap<>();
- Map<Integer, String> attrNames = new HashMap<>();
- Map<Integer, String> relatNames = new HashMap<>();
- Map<Integer, String> queryNames = new HashMap<>();
- Map<Integer, String> embeddableNames = new HashMap<>();
- Map<Integer, String> embeddableAttributeNames = new HashMap<>();
- Iterator it = paths.iterator();
- int index = 0;
- while (it.hasNext()) {
- Object path = it.next();
-
- if (path instanceof ObjEntity) {
- objEntityNames.put(new Integer(index++), ((ObjEntity) path).getName());
- }
-
- else if (path instanceof DbEntity) {
- dbEntityNames.put(new Integer(index++), ((DbEntity) path).getName());
- }
-
- else if (path instanceof Query) {
- queryNames.put(new Integer(index++), ((Query) path).getName());
- }
-
- else if (path instanceof Embeddable) {
- String name = ((Embeddable) path).getClassName();
- embeddableNames.put(new Integer(index++), name);
- }
-
- else if (path instanceof EmbeddableAttribute) {
- Embeddable parentObject = ((EmbeddableAttribute) path).getEmbeddable();
- embeddableAttributeNames.put(new Integer(index++), parentObject
- .getClassName()
- + "."
- + ((EmbeddableAttribute) path).getName());
- }
- else if (path instanceof Attribute) {
- Object parentObject = ((Attribute) path).getParent();
- attrNames.put(new Integer(index++), getParentName(parentObject)
- + "."
- + ((Attribute) path).getName());
- }
-
- else if (path instanceof Relationship) {
- Object parentObject = ((Relationship) path).getParent();
-
- /*
- * relationships are different from attributes in that they do not
- * correctly return the owning entity when inheritance is involved.
- * Hopefully this will be reconciled in the future relases
- */
- String parentName = getParentName(parentObject);
- // if (!parentObject.equals(path)) {
- // parentName = ((ObjEntity) path[path.length - 2]).getName();
- // }
-
- relatNames.put(new Integer(index++), parentName
- + "."
- + ((Relationship) path).getName());
- }
- }
-
- view = new FindDialogView(
- objEntityNames,
- dbEntityNames,
- attrNames,
- relatNames,
- queryNames,
- embeddableNames,
- embeddableAttributeNames);
+ this.searchResults = searchResults;
+ view = new FindDialogView(searchResults);
initBindings();
}
@@ -155,7 +57,6 @@ public class FindDialog extends CayenneController {
makeCloseableOnEscape();
view.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
- view.setModal(true);
view.setVisible(true);
}
@@ -171,275 +72,41 @@ public class FindDialog extends CayenneController {
}
});
- font = view.getOkButton().getFont();
- fontSelected = new Font(font.getFamily(), font.BOLD, font.getSize() + 2);
-
JTable table = view.getTable();
- table.setRowHeight(fontSelected.getSize() + 6);
- table.setRowMargin(0);
- table.addKeyListener(new JumpToResultsKeyListener());
- table.addMouseListener(new JumpToResultActionListener());
+ table.setRowHeight(24);
+ table.setRowMargin(3);
+ JumpToResultActionListener listener = new JumpToResultActionListener();
+ table.addKeyListener(listener);
+ table.addMouseListener(listener);
table.getSelectionModel().setSelectionInterval(0, 0);
}
- public static void jumpToResult(Object path) {
- EditorView editor = ((CayenneModelerFrame) Application
- .getInstance()
- .getFrameController()
- .getView()).getView();
- DataChannelDescriptor domain = (DataChannelDescriptor) Application
- .getInstance()
- .getProject()
- .getRootNode();
- if (path instanceof Entity) {
-
- Object[] o = new Object[3];
- o[0] = domain;
- o[1] = ((Entity) path).getDataMap();
- o[2] = (Entity) path;
-
- TreePath treePath = buildTreePath(o, editor);
- ProjectTreeView projectTreeView = editor.getProjectTreeView();
- if (!projectTreeView.isExpanded(treePath.getParentPath())) {
- projectTreeView.expandPath(treePath.getParentPath());
- }
-
- /** Make selection in a project tree, open correspondent entity tab */
- projectTreeView.getSelectionModel().setSelectionPath(treePath);
- EntityDisplayEvent event = new EntityDisplayEvent(
- projectTreeView,
- (Entity) path,
- ((Entity) path).getDataMap(),
- domain);
- event.setMainTabFocus(true);
-
- if (path instanceof ObjEntity)
- editor.getObjDetailView().currentObjEntityChanged(event);
- if (path instanceof DbEntity)
- editor.getDbDetailView().currentDbEntityChanged(event);
- }
- else if (path instanceof QueryDescriptor) {
-
- DataMap dmForQuery = null;
-
- dmForQuery = ((QueryDescriptor) path).getDataMap();
-
- Object[] o = new Object[3];
- o[0] = domain;
- o[1] = dmForQuery;
- o[2] = path;
-
- TreePath treePath = buildTreePath(o, editor);
- ProjectTreeView projectTreeView = editor.getProjectTreeView();
- if (!projectTreeView.isExpanded(treePath.getParentPath())) {
- projectTreeView.expandPath(treePath.getParentPath());
- }
-
- /** Make selection in a project tree, open correspondent entity tab */
- editor.getProjectTreeView().getSelectionModel().setSelectionPath(treePath);
- QueryDisplayEvent event = new QueryDisplayEvent(
- projectTreeView,
- (QueryDescriptor) path,
- dmForQuery,
- domain);
-
- editor.currentQueryChanged(event);
- }
-
- else if (path instanceof Embeddable) {
-
- Object[] o = new Object[3];
- o[0] = domain;
- o[1] = ((Embeddable) path).getDataMap();
- o[2] = (Embeddable) path;
-
- TreePath treePath = buildTreePath(o, editor);
- ProjectTreeView projectTreeView = editor.getProjectTreeView();
- if (!projectTreeView.isExpanded(treePath.getParentPath())) {
- projectTreeView.expandPath(treePath.getParentPath());
- }
-
- /** Make selection in a project tree, open correspondent entity tab */
- editor.getProjectTreeView().getSelectionModel().setSelectionPath(treePath);
- EmbeddableDisplayEvent event = new EmbeddableDisplayEvent(projectTreeView, (Embeddable) path, ((Embeddable) path)
- .getDataMap(), domain);
- event.setMainTabFocus(true);
-
- editor.currentEmbeddableChanged(event);
- }
-
- else if (path instanceof EmbeddableAttribute) {
-
- /** Make selection in a project tree, open correspondent embeddable tab */
- Object[] o = new Object[3];
- o[0] = domain;
- o[1] = ((EmbeddableAttribute) path).getEmbeddable().getDataMap();
- o[2] = ((EmbeddableAttribute) path).getEmbeddable();
-
- TreePath treePath = buildTreePath(o, editor);
- ProjectTreeView projectTreeView = editor.getProjectTreeView();
- if (!projectTreeView.isExpanded(treePath.getParentPath())) {
- projectTreeView.expandPath(treePath.getParentPath());
- }
-
- editor.getProjectTreeView().getSelectionModel().setSelectionPath(treePath);
-
- EmbeddableAttributeDisplayEvent event = new EmbeddableAttributeDisplayEvent(
- projectTreeView,
- ((EmbeddableAttribute) path).getEmbeddable(),
- (EmbeddableAttribute) path,
- ((EmbeddableAttribute) path).getEmbeddable().getDataMap(),
- domain);
- event.setMainTabFocus(true);
-
- editor.getEmbeddableView().currentEmbeddableAttributeChanged(event);
- }
-
- else if (path instanceof Attribute || path instanceof Relationship) {
-
- /** Make selection in a project tree, open correspondent attributes tab */
- Object[] o = new Object[3];
- o[0] = domain;
- if (path instanceof Attribute) {
- o[1] = ((Attribute) path).getEntity().getDataMap();
- o[2] = ((Attribute) path).getEntity();
- }
- else {
- o[1] = ((Relationship) path).getSourceEntity().getDataMap();
- o[2] = ((Relationship) path).getSourceEntity();
- }
-
- TreePath treePath = buildTreePath(o, editor);
- ProjectTreeView projectTreeView = editor.getProjectTreeView();
- if (!projectTreeView.isExpanded(treePath.getParentPath())) {
- projectTreeView.expandPath(treePath.getParentPath());
- }
-
- projectTreeView.getSelectionModel().setSelectionPath(treePath);
-
- if (path instanceof DbAttribute) {
- AttributeDisplayEvent event = new AttributeDisplayEvent(projectTreeView, (Attribute) path, ((Attribute) path)
- .getEntity(), ((Attribute) path).getEntity().getDataMap(), domain);
- event.setMainTabFocus(true);
- editor.getDbDetailView().currentDbAttributeChanged(event);
- }
-
- if (path instanceof ObjAttribute) {
- AttributeDisplayEvent event = new AttributeDisplayEvent(projectTreeView, (Attribute) path, ((Attribute) path)
- .getEntity(), ((Attribute) path).getEntity().getDataMap(), domain);
- event.setMainTabFocus(true);
- editor.getObjDetailView().currentObjAttributeChanged(event);
- }
-
- if (path instanceof DbRelationship) {
- RelationshipDisplayEvent event = new RelationshipDisplayEvent(projectTreeView, (Relationship) path, ((Relationship) path)
- .getSourceEntity(), ((Relationship) path)
- .getSourceEntity()
- .getDataMap(), domain);
- event.setMainTabFocus(true);
- editor.getDbDetailView().currentDbRelationshipChanged(event);
- }
- if (path instanceof ObjRelationship) {
- RelationshipDisplayEvent event = new RelationshipDisplayEvent(projectTreeView, (Relationship) path, ((Relationship) path)
- .getSourceEntity(), ((Relationship) path)
- .getSourceEntity()
- .getDataMap(), domain);
- event.setMainTabFocus(true);
- editor.getObjDetailView().currentObjRelationshipChanged(event);
- }
- }
- }
-
- private class JumpToResultActionListener implements MouseListener {
-
- public void mouseClicked(MouseEvent e) {
- JTable table = (JTable) e.getSource();
- Integer selectedLine = table.getSelectionModel().getLeadSelectionIndex();
- JLabel label = (JLabel) table.getModel().getValueAt(selectedLine, 0);
- Integer index = (Integer) FindDialogView.getLabelAndObjectIndex().get(label);
-
- Object path = paths.get(index);
- jumpToResult(path);
- }
-
- public void mouseEntered(MouseEvent e) {
- }
-
- public void mouseExited(MouseEvent e) {
- }
-
- public void mousePressed(MouseEvent e) {
- }
+ private class JumpToResultActionListener implements MouseListener, KeyListener {
+ @Override
public void mouseReleased(MouseEvent e) {
+ openResult(e);
}
- }
-
- private class JumpToResultsKeyListener implements KeyListener {
-
+ @Override
public void keyPressed(KeyEvent e) {
-
- if (e.getKeyCode() == KeyEvent.VK_ENTER) {
-
- JTable table = (JTable) e.getSource();
- Integer selectedLine = table.getSelectionModel().getLeadSelectionIndex();
- JLabel label = (JLabel) table.getModel().getValueAt(selectedLine, 0);
- Integer index = (Integer) FindDialogView.getLabelAndObjectIndex().get(
- label);
-
- Object[] path = (Object[]) paths.get(index);
- jumpToResult(path);
+ if (e.getKeyCode() != KeyEvent.VK_ENTER) {
+ return;
}
+ openResult(e);
}
- public void keyReleased(KeyEvent e) {
- }
-
- public void keyTyped(KeyEvent e) {
- }
- }
-
- /**
- * Builds a tree path for a given path. Urgent for later selection.
- *
- * @param path
- * @return tree path
- */
- private static TreePath buildTreePath(Object[] path, EditorView editor) {
- Object[] mutableTreeNodes = new Object[path.length];
- mutableTreeNodes[0] = ((ProjectTreeModel) editor.getProjectTreeView().getModel())
- .getRootNode();
-
- Object[] helper;
- for (int i = 1; i < path.length; i++) {
- helper = new Object[i];
- for (int j = 0; j < i;) {
- helper[j] = path[++j];
- }
- mutableTreeNodes[i] = ((ProjectTreeModel) editor
- .getProjectTreeView()
- .getModel()).getNodeForObjectPath(helper);
+ private void openResult(InputEvent e) {
+ JTable table = (JTable) e.getSource();
+ Integer selectedLine = table.getSelectionModel().getLeadSelectionIndex();
+ FindAction.jumpToResult(searchResults.get(selectedLine));
}
- return new TreePath(mutableTreeNodes);
- }
-
- private String getParentName(Object parentObject) {
- String nameParent = null;
- if (parentObject instanceof ObjEntity) {
- ObjEntity objEntity = (ObjEntity) parentObject;
- nameParent = objEntity.getName();
- }
- if (parentObject instanceof DbEntity) {
- DbEntity dbEntity = (DbEntity) parentObject;
- nameParent = dbEntity.getName();
- }
- if (parentObject instanceof Embeddable) {
- Embeddable embeddable = (Embeddable) parentObject;
- nameParent = embeddable.getClassName();
- }
- return nameParent;
+ @Override public void keyReleased(KeyEvent e) {}
+ @Override public void keyTyped(KeyEvent e) {}
+ @Override public void mouseEntered(MouseEvent e) {}
+ @Override public void mouseExited(MouseEvent e) {}
+ @Override public void mousePressed(MouseEvent e) {}
+ @Override public void mouseClicked(MouseEvent e) {}
}
-
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/c24bb767/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/FindDialogView.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/FindDialogView.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/FindDialogView.java
index 07a02a9..753685b 100755
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/FindDialogView.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/FindDialogView.java
@@ -18,25 +18,18 @@
****************************************************************/
package org.apache.cayenne.modeler.dialog;
-import org.apache.cayenne.map.DbEntity;
-import org.apache.cayenne.map.Embeddable;
-import org.apache.cayenne.map.ObjAttribute;
-import org.apache.cayenne.map.ObjEntity;
-import org.apache.cayenne.map.ObjRelationship;
+import org.apache.cayenne.modeler.action.FindAction;
import org.apache.cayenne.modeler.util.CellRenderers;
-import org.apache.cayenne.query.SelectQuery;
import org.apache.cayenne.swing.ImageRendererColumn;
import javax.swing.*;
-import java.awt.*;
+import javax.swing.table.DefaultTableModel;
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.Frame;
import java.awt.event.KeyEvent;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.TreeMap;
+import java.util.List;
/**
@@ -45,145 +38,59 @@ import java.util.TreeMap;
public class FindDialogView extends JDialog {
private JButton okButton;
- private static JScrollPane scrollPane;
private JTable table;
- private static Map LabelAndObjectIndex;
-
- public static Map getLabelAndObjectIndex() {
- return LabelAndObjectIndex;
- }
+ private int index;
public JTable getTable() {
return table;
}
- public FindDialogView(Map objEntityNames, Map dbEntityNames, Map attrNames,
- Map relatNames, Map queryNames, Map embeddableNames, Map embeddableAttributeNames) {
+ public FindDialogView(List<FindAction.SearchResultEntry> searchResults) {
+ super((Frame) null, "Search results", true);
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
- if (objEntityNames.isEmpty()
- && dbEntityNames.isEmpty()
- && attrNames.isEmpty()
- && relatNames.isEmpty()
- && queryNames.isEmpty()
- && embeddableNames.isEmpty()
- && embeddableAttributeNames.isEmpty()) {
- panel.add(new JLabel("Nothing found!"));
- }
- else {
-
- int curentLineInTable = 0;
- int sizeDataVector = objEntityNames.size()
- + dbEntityNames.size()
- + attrNames.size()
- + relatNames.size()
- + queryNames.size()
- + embeddableNames.size()
- + embeddableAttributeNames.size();
-
- Object[][] dataVector = new Object[sizeDataVector][];
-
- TableModel tableModel = new TableModel();
-
- LabelAndObjectIndex = new HashMap<>();
-
- dataVector = createResultTable(objEntityNames, CellRenderers
- .iconForObject(new ObjEntity()), dataVector, curentLineInTable);
-
- curentLineInTable = objEntityNames.size();
- dataVector = createResultTable(embeddableNames, CellRenderers
- .iconForObject(new Embeddable()), dataVector, curentLineInTable);
-
- curentLineInTable = curentLineInTable + embeddableNames.size();
- dataVector = createResultTable(dbEntityNames, CellRenderers
- .iconForObject(new DbEntity()), dataVector, curentLineInTable);
-
- curentLineInTable = curentLineInTable + dbEntityNames.size();
- dataVector = createResultTable(attrNames, CellRenderers
- .iconForObject(new ObjAttribute()), dataVector, curentLineInTable);
-
- curentLineInTable = curentLineInTable + attrNames.size();
- dataVector = createResultTable(embeddableAttributeNames, CellRenderers
- .iconForObject(new ObjAttribute()), dataVector, curentLineInTable);
-
- curentLineInTable = curentLineInTable + embeddableAttributeNames.size();
- dataVector = createResultTable(relatNames, CellRenderers
- .iconForObject(new ObjRelationship()), dataVector, curentLineInTable);
-
- curentLineInTable = curentLineInTable + relatNames.size();
- dataVector = createResultTable(queryNames, CellRenderers
- .iconForObject(new SelectQuery()), dataVector, curentLineInTable);
-
- tableModel.setDataVector(dataVector, new Object[] {
- ""
- });
-
- table = new JTable(tableModel);
-
- table.getColumnModel().getColumn(0).setCellRenderer(new ImageRendererColumn());
- table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
-
- InputMap im = table
- .getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
- InputMap imParent = im.getParent();
- imParent.remove(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0));
- im.setParent(imParent);
- im.remove(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0));
- table.setInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, im);
- }
+ DefaultTableModel tableModel = new DefaultTableModel() {
+ @Override
+ public boolean isCellEditable(int row, int col) {
+ return false;
+ }
+ };
+ tableModel.setDataVector(convertToDataVector(searchResults), new Object[] {""});
+
+ table = new JTable(tableModel);
+ table.getColumnModel().getColumn(0).setCellRenderer(new ImageRendererColumn());
+ table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+
+ InputMap im = table.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
+ InputMap imParent = im.getParent();
+ imParent.remove(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0));
+ im.setParent(imParent);
+ im.remove(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0));
+ table.setInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, im);
JPanel okPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
okButton = new JButton("OK");
okPanel.add(okButton);
JComponent contentPane = (JComponent) getContentPane();
-
contentPane.setLayout(new BorderLayout());
- scrollPane = new JScrollPane( // panel
- table,
- JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
- JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
-
+ JScrollPane scrollPane = new JScrollPane(table,
+ JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
contentPane.add(scrollPane);
contentPane.add(okPanel, BorderLayout.SOUTH);
-
contentPane.setPreferredSize(new Dimension(400, 325));
- setTitle("Search results");
}
- private Object[][] createResultTable(
- Map names,
- Icon icon,
- Object[][] dataVector,
- int curentLineInTable) {
-
- Comparator<String> comparer = new Comparator<String>() {
-
- public int compare(String o1, String o2) {
- return o1.compareTo(o2);
- }
- };
-
- Map sortedByNameMap = sortMapByValue(names, comparer);
-
- Iterator it = sortedByNameMap.keySet().iterator();
- Object[] objectHelper = new Object[] {};
-
- while (it.hasNext()) {
- Integer index = (Integer) it.next();
+ private JLabel[][] convertToDataVector(List<FindAction.SearchResultEntry> resultEntries) {
+ JLabel[][] dataVector = new JLabel[resultEntries.size()][1];
+ for (FindAction.SearchResultEntry entry : resultEntries) {
JLabel labelIcon = new JLabel();
- labelIcon.setIcon(icon);
- labelIcon.setVisible(true);
- labelIcon.setText((String) sortedByNameMap.get(index));
- objectHelper = new Object[] {
- labelIcon
- };
- dataVector[curentLineInTable] = objectHelper;
- LabelAndObjectIndex.put(labelIcon, index);
- curentLineInTable++;
+ labelIcon.setIcon(CellRenderers.iconForObject(entry.getObject()));
+ labelIcon.setText(entry.getName());
+ dataVector[index++] = new JLabel[]{labelIcon};
}
return dataVector;
@@ -192,28 +99,4 @@ public class FindDialogView extends JDialog {
public JButton getOkButton() {
return okButton;
}
-
- public <K, V> Map<K, V> sortMapByValue(Map<K, V> in, Comparator<? super V> compare) {
- Map<V, K> swapped = new TreeMap<V, K>(compare);
- for (Entry<K, V> entry : in.entrySet()) {
- if (entry.getValue() != null) {
- swapped.put(entry.getValue(), entry.getKey());
- }
- }
- LinkedHashMap<K, V> result = new LinkedHashMap<K, V>();
- for (Entry<V, K> entry : swapped.entrySet()) {
- if (entry.getValue() != null) {
- result.put(entry.getValue(), entry.getKey());
- }
- }
- return result;
- }
-
-}
-
-class TableModel extends javax.swing.table.DefaultTableModel {
-
- public boolean isCellEditable(int row, int col) {
- return false;
- }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/c24bb767/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/AttributeDisplayEvent.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/AttributeDisplayEvent.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/AttributeDisplayEvent.java
index 1ab2a1b..ffb2550 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/AttributeDisplayEvent.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/event/AttributeDisplayEvent.java
@@ -18,17 +18,14 @@ package org.apache.cayenne.modeler.event;
* under the License.
****************************************************************/
-
import org.apache.cayenne.configuration.DataChannelDescriptor;
import org.apache.cayenne.map.Attribute;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.Entity;
-/**
- */
public class AttributeDisplayEvent extends EntityDisplayEvent {
- protected Attribute[] attributes;
+ protected final Attribute[] attributes;
public AttributeDisplayEvent(
Object src,
@@ -36,18 +33,15 @@ public class AttributeDisplayEvent extends EntityDisplayEvent {
Entity entity,
DataMap dataMap,
DataChannelDescriptor domain) {
-
- super(src, entity, dataMap, domain);
- attributes = new Attribute[] { attribute };
+ this(src, new Attribute[]{attribute}, entity, dataMap, domain);
}
public AttributeDisplayEvent(
- Object src,
- Attribute[] attributes,
- Entity entity,
- DataMap dataMap,
- DataChannelDescriptor domain) {
-
+ Object src,
+ Attribute[] attributes,
+ Entity entity,
+ DataMap dataMap,
+ DataChannelDescriptor domain) {
super(src, entity, dataMap, domain);
this.attributes = attributes;
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/c24bb767/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/BaseGraphBuilder.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/BaseGraphBuilder.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/BaseGraphBuilder.java
index ccc3b0d..ab1e24e 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/BaseGraphBuilder.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/BaseGraphBuilder.java
@@ -146,7 +146,11 @@ abstract class BaseGraphBuilder implements GraphBuilder, DataMapListener {
graph.addMouseWheelListener(new MouseWheelListener() {
public void mouseWheelMoved(MouseWheelEvent e) {
- graph.setScale(graph.getScale() / Math.pow(ZOOM_FACTOR, e.getWheelRotation()));
+ // limit scale
+ double scale = graph.getScale() / Math.pow(ZOOM_FACTOR, e.getWheelRotation());
+ scale = Math.max(scale, 0.1);
+ scale = Math.min(scale, 3);
+ graph.setScale(scale);
}
});
http://git-wip-us.apache.org/repos/asf/cayenne/blob/c24bb767/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/action/EntityDisplayAction.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/action/EntityDisplayAction.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/action/EntityDisplayAction.java
index 1c6299e..4d3a56c 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/action/EntityDisplayAction.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/graph/action/EntityDisplayAction.java
@@ -24,26 +24,23 @@ import javax.swing.Action;
import javax.swing.Icon;
import org.apache.cayenne.configuration.ConfigurationNode;
-import org.apache.cayenne.configuration.DataChannelDescriptor;
import org.apache.cayenne.map.Entity;
import org.apache.cayenne.modeler.Application;
-import org.apache.cayenne.modeler.ProjectController;
-import org.apache.cayenne.modeler.dialog.FindDialog;
+import org.apache.cayenne.modeler.action.FindAction;
import org.apache.cayenne.modeler.graph.GraphBuilder;
import org.apache.cayenne.modeler.util.CayenneAction;
/**
- * Action that displays one of the objects in main tree, and then fires another action (if
- * specified)
+ * Action that displays one of the objects in main tree, and then fires another action (if specified)
*/
public class EntityDisplayAction extends CayenneAction {
/**
* Action that will be performed after selection
*/
- CayenneAction delegate;
+ private CayenneAction delegate;
- GraphBuilder builder;
+ private GraphBuilder builder;
public EntityDisplayAction(GraphBuilder builder) {
super("Show", Application.getInstance());
@@ -61,9 +58,7 @@ public class EntityDisplayAction extends CayenneAction {
private void init() {
setEnabled(true);
- /**
- * Create icon manually, because at creation of super object delegate is null
- */
+ // Create icon manually, because at creation of super object delegate is null
Icon icon = createIcon();
if (icon != null) {
super.putValue(Action.SMALL_ICON, icon);
@@ -79,21 +74,14 @@ public class EntityDisplayAction extends CayenneAction {
}
}
- boolean display() {
+ private boolean display() {
Entity entity = builder.getSelectedEntity();
if (entity == null) {
return false;
}
- ProjectController mediator = getProjectController();
-
- // we're always in same domain
- FindDialog.jumpToResult(new Object[] {
- getApplication().getProject(),
- (DataChannelDescriptor) mediator.getProject().getRootNode(),
- entity.getDataMap(), entity
- });
-
+ // reusing logic from FindAction
+ FindAction.jumpToResult(new FindAction.SearchResultEntry(entity, entity.getName()));
return true;
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/c24bb767/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 4a684fd..bab507e 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
@@ -22,38 +22,28 @@ import java.awt.Color;
import java.awt.Component;
import javax.swing.BorderFactory;
-import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
-import org.apache.cayenne.modeler.dialog.FindDialog;
-
public class ImageRendererColumn extends DefaultTableCellRenderer {
- JLabel lbl = new JLabel();
- ImageIcon icon = null;
+ private final Color ROLLOVER_BACKGROUND = new Color(223, 223, 223);
+
+ private JLabel lbl = new JLabel();
public ImageRendererColumn() {
super();
}
- public Component getTableCellRendererComponent(
- JTable table,
- Object value,
- boolean isSelected,
- boolean hasFocus,
- int row,
- int column) {
+ public Component getTableCellRendererComponent(JTable table, Object value,
+ boolean isSelected, boolean hasFocus, int row, int column) {
lbl.setOpaque(true);
- lbl.setText(((JLabel) value).getText().toString());
+ lbl.setText(((JLabel) value).getText());
lbl.setIcon(((JLabel) value).getIcon());
- lbl.setBorder(BorderFactory.createLineBorder(Color.WHITE, 0));
- lbl.setBackground(Color.WHITE);
-
+ lbl.setBorder(BorderFactory.createEmptyBorder());
+ lbl.setBackground(isSelected ? ROLLOVER_BACKGROUND : Color.WHITE);
lbl.setHorizontalAlignment(JLabel.LEFT);
- lbl.setFont(isSelected ? FindDialog.getFontSelected() : FindDialog.getFont());
-
return lbl;
}
}