Repository: cayenne Updated Branches: refs/heads/master 15308e5dd -> 323771a2e
CAY-2199 Modeler on Windows: The same project is displayed twice in "Recent Projects" - remove duplicated projects Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/323771a2 Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/323771a2 Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/323771a2 Branch: refs/heads/master Commit: 323771a2ef8acb95b14800d42f278a04aa63ea9e Parents: 15308e5 Author: Nikita Timofeev <stari...@gmail.com> Authored: Mon Feb 6 11:13:56 2017 +0300 Committer: Nikita Timofeev <stari...@gmail.com> Committed: Mon Feb 6 11:13:56 2017 +0300 ---------------------------------------------------------------------- docs/doc/src/main/resources/RELEASE-NOTES.txt | 1 + .../modeler/CayenneModelerController.java | 41 +++++++------------- .../java/org/apache/cayenne/modeler/Main.java | 14 ++----- .../cayenne/modeler/ModelerPreferences.java | 29 +++++++------- .../dialog/welcome/RecentFileListModel.java | 11 +++--- .../dialog/welcome/RecentFileListRenderer.java | 9 +++-- .../modeler/dialog/welcome/WelcomeScreen.java | 5 +-- .../cayenne/modeler/util/RecentFileMenu.java | 9 ++--- 8 files changed, 51 insertions(+), 68 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cayenne/blob/323771a2/docs/doc/src/main/resources/RELEASE-NOTES.txt ---------------------------------------------------------------------- diff --git a/docs/doc/src/main/resources/RELEASE-NOTES.txt b/docs/doc/src/main/resources/RELEASE-NOTES.txt index 733956d..b3291a0 100644 --- a/docs/doc/src/main/resources/RELEASE-NOTES.txt +++ b/docs/doc/src/main/resources/RELEASE-NOTES.txt @@ -36,6 +36,7 @@ CAY-2137 When generating SQL from EJBQL, use "AND" to separate multiple join con CAY-2174 Change FK attribute name cause ObjAttribute appear after Reverse Engineering CAY-2175 AliasName used in EJBQLQuery is not working if it contains mixed case CAY-2183 Newly created DbRelationship is unexpectedly renamed by the Modeler +CAY-2199 Modeler on Windows: The same project is displayed twice in "Recent Projects" ---------------------------------- Release: 4.0.M4 http://git-wip-us.apache.org/repos/asf/cayenne/blob/323771a2/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 ae90f12..ee6abf7 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 @@ -263,29 +263,28 @@ public class CayenneModelerController extends CayenneController { /** Adds path to the list of last opened projects in preferences. */ public void addToLastProjListAction(File file) { - String path = file.getAbsolutePath(); - Preferences frefLastProjFiles = ModelerPreferences.getLastProjFilesPref(); - List<String> arr = ModelerPreferences.getLastProjFiles(); + Preferences prefLastProjFiles = ModelerPreferences.getLastProjFilesPref(); + List<File> arr = ModelerPreferences.getLastProjFiles(); // Add proj path to the preferences // Prevent duplicate entries. - if (arr.contains(path)) { - arr.remove(path); + if (arr.contains(file)) { + arr.remove(file); } - arr.add(0, path); + arr.add(0, file); while (arr.size() > ModelerPreferences.LAST_PROJ_FILES_SIZE) { arr.remove(arr.size() - 1); } try { - frefLastProjFiles.clear(); + prefLastProjFiles.clear(); } catch (BackingStoreException ignored) { // ignore exception } - int size = arr.size(); + int size = arr.size(); for (int i = 0; i < size; i++) { - frefLastProjFiles.put(String.valueOf(i), arr.get(i)); + prefLastProjFiles.put(String.valueOf(i), arr.get(i).getAbsolutePath()); } } @@ -328,21 +327,12 @@ public class CayenneModelerController extends CayenneController { public void changePathInLastProjListAction(File oldFile, File newFile) { Preferences frefLastProjFiles = ModelerPreferences.getLastProjFilesPref(); - List<String> arr = ModelerPreferences.getLastProjFiles(); - // Add proj path to the preferences - // Prevent duplicate entries. - String oldPath = oldFile.getAbsolutePath(); - String newPath = newFile.getAbsolutePath(); + List<File> arr = ModelerPreferences.getLastProjFiles(); - if (arr.contains(oldPath)) { - arr.remove(oldPath); - } - - if (arr.contains(newPath)) { - arr.remove(newPath); - } - - arr.add(0, newPath); + // Add proj path to the preferences + arr.remove(oldFile); + arr.remove(newFile); + arr.add(0, newFile); while (arr.size() > ModelerPreferences.LAST_PROJ_FILES_SIZE) { arr.remove(arr.size() - 1); } @@ -355,12 +345,11 @@ public class CayenneModelerController extends CayenneController { int size = arr.size(); for (int i = 0; i < size; i++) { - frefLastProjFiles.put(String.valueOf(i), arr.get(i)); + frefLastProjFiles.put(String.valueOf(i), arr.get(i).getAbsolutePath()); } - getLastDirectory().setDirectory(new File(newPath)); + getLastDirectory().setDirectory(newFile); frame.fireRecentFileListChanged(); } - } http://git-wip-us.apache.org/repos/asf/cayenne/blob/323771a2/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Main.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Main.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Main.java index d290ca6..ce70c10 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Main.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/Main.java @@ -117,18 +117,12 @@ public class Main { protected File initialProjectFromPreferences() { - Preferences autoLoadLastProject = Application.getInstance().getPreferencesNode( - GeneralPreferences.class, - ""); - + Preferences autoLoadLastProject = Application.getInstance().getPreferencesNode(GeneralPreferences.class, ""); if ((autoLoadLastProject != null) - && autoLoadLastProject.getBoolean( - GeneralPreferences.AUTO_LOAD_PROJECT_PREFERENCE, - false)) { - - List<String> lastFiles = ModelerPreferences.getLastProjFiles(); + && autoLoadLastProject.getBoolean(GeneralPreferences.AUTO_LOAD_PROJECT_PREFERENCE, false)) { + List<File> lastFiles = ModelerPreferences.getLastProjFiles(); if (!lastFiles.isEmpty()) { - return new File(lastFiles.get(0)); + return lastFiles.get(0); } } http://git-wip-us.apache.org/repos/asf/cayenne/blob/323771a2/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ModelerPreferences.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ModelerPreferences.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ModelerPreferences.java index 1535d85..4d94f11 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ModelerPreferences.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/ModelerPreferences.java @@ -25,8 +25,8 @@ import org.apache.cayenne.pref.UpgradeCayennePreference; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import java.io.File; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.prefs.BackingStoreException; import java.util.prefs.PreferenceChangeEvent; @@ -81,29 +81,28 @@ public class ModelerPreferences implements PreferenceChangeListener { return getEditorPreferences().node(CayennePreference.LAST_PROJ_FILES); } - public static List<String> getLastProjFiles() { + public static List<File> getLastProjFiles() { Preferences filesPrefs = getLastProjFilesPref(); - ArrayList<String> arrayLastProjFiles = new ArrayList<>(); - String[] keys = null; + String[] keys; try { keys = filesPrefs.keys(); } catch (BackingStoreException e) { logObj.warn("Error reading preferences file.", e); + return new ArrayList<>(); } - if (keys != null) { - int len = keys.length; - ArrayList<Integer> keysInteger = new ArrayList<>(); - for (int i = 0; i < len; i++) { - keysInteger.add(i); - } - Collections.sort(keysInteger); - - for (int i = 0; i < len; i++) { - arrayLastProjFiles.add(filesPrefs.get(keysInteger.get(i).toString(), "")); + int len = keys.length; + List<File> lastProjectsFiles = new ArrayList<>(len); + for (int i = 0; i < len; i++) { + String fileName = filesPrefs.get(Integer.toString(i), ""); + if(!fileName.isEmpty()) { + File file = new File(fileName); + if(!lastProjectsFiles.contains(file)) { + lastProjectsFiles.add(file); + } } } - return arrayLastProjFiles; + return lastProjectsFiles; } public void preferenceChange(PreferenceChangeEvent evt) { http://git-wip-us.apache.org/repos/asf/cayenne/blob/323771a2/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/RecentFileListModel.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/RecentFileListModel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/RecentFileListModel.java index dc68259..ccea5c7 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/RecentFileListModel.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/RecentFileListModel.java @@ -19,6 +19,7 @@ package org.apache.cayenne.modeler.dialog.welcome; +import java.io.File; import java.util.ArrayList; import java.util.List; import javax.swing.AbstractListModel; @@ -28,15 +29,15 @@ import org.apache.cayenne.modeler.util.path.PathTrimmer; class RecentFileListModel extends AbstractListModel<String> { - private List<String> fileListFull; + private List<File> fileListFull; private List<String> fileList; private static PathTrimmer pathTrimmer = new DefaultPathTrimmer(); - RecentFileListModel(List<String> fileList) { + RecentFileListModel(List<File> fileList) { this.fileListFull = fileList; this.fileList = new ArrayList<>(fileList.size()); - for(String next : fileList) { - this.fileList.add(pathTrimmer.trim(next)); + for(File next : fileList) { + this.fileList.add(pathTrimmer.trim(next.getAbsolutePath())); } } @@ -50,7 +51,7 @@ class RecentFileListModel extends AbstractListModel<String> { return fileList.get(index); } - String getFullElementAt(int index) { + File getFullElementAt(int index) { return fileListFull.get(index); } } http://git-wip-us.apache.org/repos/asf/cayenne/blob/323771a2/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/RecentFileListRenderer.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/RecentFileListRenderer.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/RecentFileListRenderer.java index 9b6e1a1..82fe603 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/RecentFileListRenderer.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/RecentFileListRenderer.java @@ -23,6 +23,7 @@ import java.awt.Color; import java.awt.Component; import java.awt.Rectangle; import java.awt.event.MouseEvent; +import java.io.File; import javax.swing.DefaultListCellRenderer; import javax.swing.JList; import javax.swing.SwingConstants; @@ -37,7 +38,7 @@ import javax.swing.event.MouseInputListener; class RecentFileListRenderer extends DefaultListCellRenderer implements MouseInputListener { interface OnFileClickListener { - void onFileSelect(String fileName); + void onFileSelect(File file); } /** @@ -78,7 +79,7 @@ class RecentFileListRenderer extends DefaultListCellRenderer implements MouseInp if (rolloverRow == index) { setOpaque(true); setBackground(ROLLOVER_BACKGROUND); - setToolTipText(getFullText()); + setToolTipText(getSelectedFile().getAbsolutePath()); } else { setOpaque(false); } @@ -104,7 +105,7 @@ class RecentFileListRenderer extends DefaultListCellRenderer implements MouseInp public void mousePressed(MouseEvent e) { } - private String getFullText() { + private File getSelectedFile() { if(rolloverRow == -1) { return null; } @@ -115,7 +116,7 @@ class RecentFileListRenderer extends DefaultListCellRenderer implements MouseInp if (!SwingUtilities.isLeftMouseButton(e) || rolloverRow == -1) { return; } - listener.onFileSelect(getFullText()); + listener.onFileSelect(getSelectedFile()); rolloverRow = -1; // clear selection } http://git-wip-us.apache.org/repos/asf/cayenne/blob/323771a2/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/WelcomeScreen.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/WelcomeScreen.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/WelcomeScreen.java index b9598b7..e1b641d 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/WelcomeScreen.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/dialog/welcome/WelcomeScreen.java @@ -137,8 +137,7 @@ public class WelcomeScreen extends JScrollPane implements RecentFileListListener } @Override - public void onFileSelect(String fileName) { - File file = new File(fileName); + public void onFileSelect(File file) { ActionEvent event = new ActionEvent(file, 0, null); // Fire an action with the file as source Application.getInstance() @@ -170,7 +169,7 @@ public class WelcomeScreen extends JScrollPane implements RecentFileListListener @Override public void recentFileListChanged() { - List<String> arr = ModelerPreferences.getLastProjFiles(); + List<File> arr = ModelerPreferences.getLastProjFiles(); recentProjectsList.setModel(new RecentFileListModel(arr)); } } http://git-wip-us.apache.org/repos/asf/cayenne/blob/323771a2/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/RecentFileMenu.java ---------------------------------------------------------------------- diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/RecentFileMenu.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/RecentFileMenu.java index 7a3d59d..8bd9302 100644 --- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/RecentFileMenu.java +++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/RecentFileMenu.java @@ -20,6 +20,7 @@ package org.apache.cayenne.modeler.util; import java.awt.Component; +import java.io.File; import java.util.List; import javax.swing.Action; @@ -59,7 +60,7 @@ public class RecentFileMenu extends JMenu implements RecentFileListListener { */ public void rebuildFromPreferences() { - List<String> arr = ModelerPreferences.getLastProjFiles(); + List<File> arr = ModelerPreferences.getLastProjFiles(); while (arr.size() > ModelerPreferences.LAST_PROJ_FILES_SIZE) { arr.remove(arr.size() - 1); } @@ -70,14 +71,12 @@ public class RecentFileMenu extends JMenu implements RecentFileListListener { int prefSize = arr.size(); for (int i = 0; i < prefSize; i++) { - String name = (String) arr.get(i); - + String name = arr.get(i).getAbsolutePath(); if (i < curSize) { // update existing one FileMenuItem item = (FileMenuItem) comps[i]; item.setText(name); - } - else { + } else { // add a new one FileMenuItem item = new FileMenuItem(name); item.setAction(findAction());