Simexplorer-si-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- 1607 discussions
r1045 - trunk/simexplorer-is/simexplorer-is-service/src/resources/i18n
by glandais@users.labs.libre-entreprise.org 17 Feb '08
by glandais@users.labs.libre-entreprise.org 17 Feb '08
17 Feb '08
Author: glandais
Date: 2008-02-17 19:45:33 +0000 (Sun, 17 Feb 2008)
New Revision: 1045
Modified:
trunk/simexplorer-is/simexplorer-is-service/src/resources/i18n/simexplorer-is-service-en_GB.properties
trunk/simexplorer-is/simexplorer-is-service/src/resources/i18n/simexplorer-is-service-fr_FR.properties
Log:
Delete business rules
Modified: trunk/simexplorer-is/simexplorer-is-service/src/resources/i18n/simexplorer-is-service-en_GB.properties
===================================================================
--- trunk/simexplorer-is/simexplorer-is-service/src/resources/i18n/simexplorer-is-service-en_GB.properties 2008-02-17 19:45:22 UTC (rev 1044)
+++ trunk/simexplorer-is/simexplorer-is-service/src/resources/i18n/simexplorer-is-service-en_GB.properties 2008-02-17 19:45:33 UTC (rev 1045)
@@ -1,5 +1,7 @@
simexplorer.service.attachmentnotfund=File not found
simexplorer.service.business.groupexist=Group already exist
+simexplorer.service.business.notdeletable=This item can not be deleted.
+simexplorer.service.business.notdeletable.allversions=This item can not be deleted in all its versions.
simexplorer.service.business.userexist=User already exist
simexplorer.service.invalidhash=Invalid hash for file
simexplorer.service.mail.footer=Simexplorer IS
Modified: trunk/simexplorer-is/simexplorer-is-service/src/resources/i18n/simexplorer-is-service-fr_FR.properties
===================================================================
--- trunk/simexplorer-is/simexplorer-is-service/src/resources/i18n/simexplorer-is-service-fr_FR.properties 2008-02-17 19:45:22 UTC (rev 1044)
+++ trunk/simexplorer-is/simexplorer-is-service/src/resources/i18n/simexplorer-is-service-fr_FR.properties 2008-02-17 19:45:33 UTC (rev 1045)
@@ -1,5 +1,7 @@
simexplorer.service.attachmentnotfund=Fichier non trouv\u00E9
simexplorer.service.business.groupexist=Le groupe existe d\u00E9j\u00E0
+simexplorer.service.business.notdeletable=Cet \u00E9l\u00E9ment ne peut pas \u00EAtre supprim\u00E9.
+simexplorer.service.business.notdeletable.allversions=Cet \u00E9l\u00E9ment ne peut pas \u00EAtre supprim\u00E9 dans toutes ses versions.
simexplorer.service.business.userexist=L'utilisateur existe d\u00E9j\u00E0
simexplorer.service.invalidhash=Hash invalide pour un fichier
simexplorer.service.mail.footer=Simexplorer IS
1
0
r1044 - trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service
by glandais@users.labs.libre-entreprise.org 17 Feb '08
by glandais@users.labs.libre-entreprise.org 17 Feb '08
17 Feb '08
Author: glandais
Date: 2008-02-17 19:45:22 +0000 (Sun, 17 Feb 2008)
New Revision: 1044
Modified:
trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java
Log:
Delete business rules
Modified: trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java 2008-02-17 15:54:06 UTC (rev 1043)
+++ trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java 2008-02-17 19:45:22 UTC (rev 1044)
@@ -24,6 +24,7 @@
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -149,7 +150,7 @@
LoggableElement le;
BaseEntityFactory<? extends DataEntity> factory;
- factory = BaseEntityFactory.getFactory(LoggableElement.class.getPackage().getName() + DOT + mde.getType());
+ factory = BaseEntityFactory.getFactory(LoggableElement.class.getPackage().getName() + DOT + mde.getType());
le = (LoggableElement) factory.loadElement(getStorageEngine().retrieveData(token, mde, getXMLAttachment()));
return le;
@@ -250,7 +251,7 @@
}
Document document;
InputStream xmlData = getStorageEngine().retrieveTempData(idxml);
- try {
+ try {
document = BaseEntityFactory.getXMLBuilder().parse(xmlData);
} catch (Exception e) {
throw new SimExplorerTechnicalException(e);
@@ -374,8 +375,8 @@
InputStream currentXml = getStorageEngine().retrieveData(token, currentMetaData, getXMLAttachment());
InputStream newXml = null;
- MetaDataFactory<MetaData> mdeFactory = MetaDataFactory.getFactory(MetaData.class);
- newXml = mdeFactory.modifyMedataElementStream(currentXml, elementToUpdate);
+ MetaDataFactory<MetaData> mdeFactory = MetaDataFactory.getFactory(MetaData.class);
+ newXml = mdeFactory.modifyMedataElementStream(currentXml, elementToUpdate);
attachments.put(getXMLAttachment(), newXml);
@@ -411,6 +412,11 @@
* @see fr.cemagref.simexplorer.is.service.StorageService#deleteElement(java.lang.String, java.lang.String, java.lang.String)
*/
public void deleteElement(String token, String uuid, String version) throws SimExplorerException {
+ MetaData[] metadatasUsedBy = getMetadatasUsedBy(token, uuid, version);
+ if (metadatasUsedBy.length > 0) {
+ throw new SimExplorerBusinessException(_("simexplorer.service.business.notdeletable"));
+ }
+
// FIXME
getStorageEngine().deleteElement(token, uuid, new Version(version));
getStorageEngine().commit();
@@ -420,6 +426,20 @@
* @see fr.cemagref.simexplorer.is.service.StorageService#deleteElement(java.lang.String, java.lang.String)
*/
public void deleteElement(String token, String uuid) throws SimExplorerException {
+ Set<MetaData> allUsedByList = new HashSet<MetaData>();
+ Version[] versions = getVersions(token, uuid);
+ for (int i = 0; i < versions.length; i++) {
+ Version aVersion = versions[i];
+ MetaData[] versionUsedBy = getMetadatasUsedBy(token, uuid, aVersion.toString());
+ for (int j = 0; j < versionUsedBy.length; j++) {
+ MetaData metaData = versionUsedBy[j];
+ allUsedByList.add(metaData);
+ }
+ }
+ if (allUsedByList.size() > 0) {
+ throw new SimExplorerBusinessException(_("simexplorer.service.business.notdeletable.allversions"));
+ }
+
// FIXME
getStorageEngine().deleteElements(token, uuid);
getStorageEngine().commit();
@@ -466,11 +486,11 @@
metaData.setParentVersionUuid(previousVersion.getUuid());
metaData.setParentVersionVersion(previousVersion.getVersion().toString());
- // get metadata factory
- MetaDataFactory<MetaData> mdeFactory = MetaDataFactory.getFactory(MetaData.class);
+ // get metadata factory
+ MetaDataFactory<MetaData> mdeFactory = MetaDataFactory.getFactory(MetaData.class);
- // Update XML with version updated
- mdeFactory.replaceMetadataInXML(document, xmlNode, metaData);
+ // Update XML with version updated
+ mdeFactory.replaceMetadataInXML(document, xmlNode, metaData);
}
}
@@ -580,12 +600,12 @@
private MetaData saveElement(String token, Document document, Element xmlNode, Map<Attachment, String> idsattachment)
throws SimExplorerException {
MetaData metaData;
- // Load metadata xml
- MetaDataFactory<MetaData> mdeFactory = MetaDataFactory.getFactory(MetaData.class);
- metaData = mdeFactory.loadElementFromParentXML(xmlNode);
+ // Load metadata xml
+ MetaDataFactory<MetaData> mdeFactory = MetaDataFactory.getFactory(MetaData.class);
+ metaData = mdeFactory.loadElementFromParentXML(xmlNode);
- // Compute element hash
- metaData.setHash(mdeFactory.computeHash(xmlNode));
+ // Compute element hash
+ metaData.setHash(mdeFactory.computeHash(xmlNode));
if (notExists(token, metaData)) {
@@ -609,7 +629,7 @@
// Prepare saving
Map<Attachment, InputStream> attachments = new HashMap<Attachment, InputStream>();
- attachments.put(getXMLAttachment(), BaseEntityFactory.serializeElement(xmlNode));
+ attachments.put(getXMLAttachment(), BaseEntityFactory.serializeElement(xmlNode));
List<Attachment> realAttachments = metaData.getAttachments();
for (Attachment attachment : realAttachments) {
@@ -646,7 +666,7 @@
String entityNode, Map<Attachment, String> idsattachment) throws SimExplorerException {
BaseEntityFactory<MetaData> elementFactory;
- elementFactory = MetaDataFactory.getFactory(MetaData.class);
+ elementFactory = MetaDataFactory.getFactory(MetaData.class);
// Elements
Element entitiesElement = elementFactory.getXMLElementByTagName(node, entitiesNode);
1
0
r1043 - trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/entities
by tchemit@users.labs.libre-entreprise.org 17 Feb '08
by tchemit@users.labs.libre-entreprise.org 17 Feb '08
17 Feb '08
Author: tchemit
Date: 2008-02-17 15:54:06 +0000 (Sun, 17 Feb 2008)
New Revision: 1043
Modified:
trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/entities/EntityHelper.java
Log:
ajout d'une propriete sur le type pour savoir si le type est un LE
Modified: trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/entities/EntityHelper.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/entities/EntityHelper.java 2008-02-17 15:53:39 UTC (rev 1042)
+++ trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/entities/EntityHelper.java 2008-02-17 15:54:06 UTC (rev 1043)
@@ -39,7 +39,7 @@
*/
public class EntityHelper {
/**
- * Une enum pour definir les differents typed'entities rencontres dans le projet.
+ * Une enum pour definir les differents types d'entities rencontres dans le projet.
* <p/>
* On ajoute ici une clef i18n pour pouvoir traduire plus tard ces types.
* <p/>
@@ -49,20 +49,21 @@
* @author chemit
*/
public static enum Type {
- Attachment(n_("simexplorer.common.attachment"), n_("simexplorer.common.attachments")),
- Code(n_("simexplorer.common.code"), n_("simexplorer.common.codes")),
- Component(n_("simexplorer.common.component"), n_("simexplorer.common.components")),
- Constant(n_("simexplorer.common.constant"), n_("simexplorer.common.constants")),
- ConstantValue(n_("simexplorer.common.constantvalue"), n_("simexplorer.common.constantvalues")),
- ExplorationApplication(n_("simexplorer.common.explorationapplication"), n_("simexplorer.common.explorationapplications")),
- ExplorationData(n_("simexplorer.common.explorationdata"), n_("simexplorer.common.explorationdatas")),
- Library(n_("simexplorer.common.library"), n_("simexplorer.common.libraries")),
- Repository(n_("simexplorer.common.repository"), n_("simexplorer.common.repositories")),
- Result(n_("simexplorer.common.result"), n_("simexplorer.common.results")),
- Structure(n_("simexplorer.common.structure"), n_("simexplorer.common.structures"));
+ Attachment(false,n_("simexplorer.common.attachment"), n_("simexplorer.common.attachments")),
+ Code(false,n_("simexplorer.common.code"), n_("simexplorer.common.codes")),
+ Component(true,n_("simexplorer.common.component"), n_("simexplorer.common.components")),
+ Constant(false,n_("simexplorer.common.constant"), n_("simexplorer.common.constants")),
+ ConstantValue(false,n_("simexplorer.common.constantvalue"), n_("simexplorer.common.constantvalues")),
+ ExplorationApplication(true,n_("simexplorer.common.explorationapplication"), n_("simexplorer.common.explorationapplications")),
+ ExplorationData(true,n_("simexplorer.common.explorationdata"), n_("simexplorer.common.explorationdatas")),
+ Library(true,n_("simexplorer.common.library"), n_("simexplorer.common.libraries")),
+ Repository(false,n_("simexplorer.common.repository"), n_("simexplorer.common.repositories")),
+ Result(false,n_("simexplorer.common.result"), n_("simexplorer.common.results")),
+ Structure(false,n_("simexplorer.common.structure"), n_("simexplorer.common.structures"));
private String i18nKey;
private String i18nKeys;
+ private boolean le;
public static String getLibelle(Object entity) {
if (entity == null) {
@@ -90,6 +91,10 @@
return _(i18nKeys);
}
+ public boolean isLe() {
+ return le;
+ }
+
protected static String getLibelle(String type) {
if (type != null) {
try {
@@ -103,7 +108,8 @@
return "";
}
- private Type(String i18nKey, String i18nKeys) {
+ private Type(boolean isLE,String i18nKey, String i18nKeys) {
+ this.le = isLE;
this.i18nKey = i18nKey;
this.i18nKeys = i18nKeys;
}
1
0
r1042 - trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model
by tchemit@users.labs.libre-entreprise.org 17 Feb '08
by tchemit@users.labs.libre-entreprise.org 17 Feb '08
17 Feb '08
Author: tchemit
Date: 2008-02-17 15:53:39 +0000 (Sun, 17 Feb 2008)
New Revision: 1042
Removed:
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/LoggableElementTreeNode.java
Log:
utilisation modele de selection d'entity
+ simplification code
Deleted: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/LoggableElementTreeNode.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/LoggableElementTreeNode.java 2008-02-17 15:53:30 UTC (rev 1041)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/LoggableElementTreeNode.java 2008-02-17 15:53:39 UTC (rev 1042)
@@ -1,99 +0,0 @@
-/*
-* ##% Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Code Lutin,
-* Tony Chemit, Gabriel Landais
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-* ##% */
-package fr.cemagref.simexplorer.is.ui.swing.model;
-
-import fr.cemagref.simexplorer.is.entities.data.Library;
-import fr.cemagref.simexplorer.is.entities.data.LoggableElement;
-import fr.cemagref.simexplorer.is.entities.data.Result;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import javax.swing.JTree;
-import javax.swing.tree.DefaultMutableTreeNode;
-import javax.swing.tree.TreePath;
-
-/**
- * Le TreeNode de base pour afficher des LoggableElement dans un arbre.
- * <p/>
- * <b>Attention, l'objet interne au node n'est pas forcement un LoggableElement,
- * par exemple pour le noeud 'Components' qui sera un simple String.</b>
- *
- * @author chemit
- */
-public class LoggableElementTreeNode extends DefaultMutableTreeNode {
-
- static protected Log log = LogFactory.getLog(LoggableElementTreeNode.class);
-
- private static final long serialVersionUID = -7544097600554338499L;
-
- protected String text;
-
- protected boolean remote;
-
- public LoggableElementTreeNode(LoggableElementTreeNode parent, Object userObject,boolean remote, boolean allowedChildren) {
- this(parent, userObject.toString(), userObject, remote,allowedChildren);
- }
-
- public LoggableElementTreeNode(LoggableElementTreeNode parent, String i18n, Object userObject,boolean remote, boolean allowedChildren) {
- super(userObject, allowedChildren);
- if (parent != null) {
- parent.add(this);
- }
- text = i18n;
- this.remote=remote;
- log.debug("Parent " + parent + ", userObject : " + userObject + ", type : " + userObject.getClass().getSimpleName());
- }
-
- @Override
- public String toString() {
- return text;
- }
-
- public boolean isRemote() {
- return remote;
- }
-
- public void collaspeAll(JTree tree) {
- if (isLeaf()) {
- return;
- }
- for (Object child : children) {
- ((LoggableElementTreeNode) child).collaspeAll(tree);
- }
- tree.collapsePath(new TreePath(getPath()));
- }
-
- public void expandAll(JTree tree) {
- if (isLeaf()) {
- return;
- }
- tree.expandPath(new TreePath(getPath()));
- for (Object child : children) {
- ((LoggableElementTreeNode) child).expandAll(tree);
- }
- }
-
- public boolean isLoggableElement() {
- return userObject != null && userObject instanceof LoggableElement;
- }
-
- public boolean isDownloadableElement() {
- return userObject != null && (userObject instanceof Result || userObject instanceof Library);
- }
-}
1
0
r1041 - in trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui: . swing swing/actions swing/actions/util swing/model
by tchemit@users.labs.libre-entreprise.org 17 Feb '08
by tchemit@users.labs.libre-entreprise.org 17 Feb '08
17 Feb '08
Author: tchemit
Date: 2008-02-17 15:53:30 +0000 (Sun, 17 Feb 2008)
New Revision: 1041
Added:
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/EntityTreeNodeHelper.java
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/EntityTreeNode.java
Removed:
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/TreeNodeBuilder.java
Modified:
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/SimExplorer.java
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/DetailTabRefreshHelper.java
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/ListTabRefreshHelper.java
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/MainUIRefreshHelper.java
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SimExplorerMainUI.java
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SimExplorerTab.java
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SynchronizeTabRefreshHelper.java
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ChangePageAction.java
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ChangeSizorAction.java
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/CollapseAllAction.java
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ConnectAction.java
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/DetailToTreeAction.java
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ExpandAllAction.java
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/HistoryNextAction.java
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/HistoryPreviousAction.java
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ResetSearchAction.java
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/SearchAction.java
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ShowDetailTabAction.java
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ShowSynchronizeTabAction.java
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/UnconnectAction.java
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/ShowListTabAbstractAction.java
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/ShowTabAbstractAction.java
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/SimExplorerAbstractAction.java
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/SimExplorerAbstractTabAction.java
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/DetailTabModel.java
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/ListTabModel.java
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/SimExplorerTabModel.java
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/SynchronizeTabModel.java
Log:
utilisation modele de selection d'entity
+ simplification code
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/SimExplorer.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/SimExplorer.java 2008-02-17 15:53:04 UTC (rev 1040)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/SimExplorer.java 2008-02-17 15:53:30 UTC (rev 1041)
@@ -19,12 +19,12 @@
package fr.cemagref.simexplorer.is.ui;
import fr.cemagref.simexplorer.is.exceptions.SimExplorerRuntimeException;
-import fr.cemagref.simexplorer.is.ui.swing.MainUIRefreshHelper;
import fr.cemagref.simexplorer.is.ui.swing.SimExplorerActionManager;
import fr.cemagref.simexplorer.is.ui.swing.SimExplorerMainUI;
import fr.cemagref.simexplorer.is.ui.swing.SimExplorerTab;
import fr.cemagref.simexplorer.is.ui.swing.actions.ConnectAction;
import fr.cemagref.simexplorer.is.ui.swing.actions.ImportAction;
+import fr.cemagref.simexplorer.is.ui.swing.actions.util.SimExplorerAbstractAction;
import fr.cemagref.simexplorer.is.ui.swing.util.ErrorDialog;
import org.codelutin.i18n.I18n;
import org.codelutin.option.ui.ConfigTableModel;
@@ -139,24 +139,32 @@
try {
// try to connect
mainUI.getConnect().getAction().actionPerformed(new ActionEvent(mainUI, 0, "connect"));
+ // action will update ui if everything is correct
+ if (context.isConnected() && conf.isShowRemoteTab()) {
+ // show remote tab
+ mainUI.getToggleTab_remote().doClick();
+ }
} catch (Exception e) {
// ignore ?
- System.err.println(e.getMessage());
+ System.err.println(e.getMessage());
}
}
- boolean isConnected = context.isConnected();
-
// refresh ui accessibles actions
- MainUIRefreshHelper.refreshConnnectState(mainUI, isConnected, null);
+ if (!context.isConnected()) {
+ getConnectAction(false).updateUI();
+ }
+
+ mainUI.setVisible(true);
+ }
+
+ public static SimExplorerAbstractAction getConnectAction(boolean isConnected) {
if (isConnected) {
- if (conf.isShowRemoteTab()) {
- // show remote tab
- mainUI.getToggleTab_remote().doClick();
- }
+ return (SimExplorerAbstractAction) getUI().getConnect().getAction();
+ } else {
+ return (SimExplorerAbstractAction) getUI().getUnconnect().getAction();
}
- mainUI.setVisible(true);
}
public static void main(String... args) throws Exception {
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/DetailTabRefreshHelper.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/DetailTabRefreshHelper.java 2008-02-17 15:53:04 UTC (rev 1040)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/DetailTabRefreshHelper.java 2008-02-17 15:53:30 UTC (rev 1041)
@@ -27,7 +27,7 @@
import fr.cemagref.simexplorer.is.ui.swing.model.DetailTabModel;
import fr.cemagref.simexplorer.is.ui.swing.model.HistoryModel;
import fr.cemagref.simexplorer.is.ui.swing.model.DetailTableModel;
-import fr.cemagref.simexplorer.is.ui.swing.model.LoggableElementTreeNode;
+import fr.cemagref.simexplorer.is.ui.swing.model.EntityTreeNode;
import static org.codelutin.i18n.I18n._;
import javax.swing.DefaultComboBoxModel;
@@ -58,6 +58,15 @@
public static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss.SSS");
+ public static void refreshDetailTab(JDetailTab ui, DetailTabModel model) {
+ EntityTreeNode root = EntityTreeNodeHelper.build(model.getRootNode(), model.isRemote());
+ EntityTreeNode current = model.getHistory().getCurrent();
+ //FIXME : if object has different version, it says that this is same!!!
+ if (current==null || !root.getUserObject().equals(current.getUserObject())) {
+ model.getHistory().add(root);
+ }
+ DetailTabRefreshHelper.updateDetailNavigationTree(ui, model.getHistory());
+ }
/**
* Rafraichit les actions d'un node dans l'arbre de navigation
@@ -66,7 +75,7 @@
* @param model le model de d'onglet detail
* @param node le node sélectionné dans l'arbre de navigation
*/
- public static void refreshDetailActions(JDetailTab ui, DetailTabModel model, LoggableElementTreeNode node) {
+ public static void refreshDetailActions(JDetailTab ui, DetailTabModel model, EntityTreeNode node) {
// refresh synchronize action button
refreshSynchroniseAction(ui, model);
// refresh download LoggableElement button
@@ -79,11 +88,11 @@
refreshDownloadAttachmentAction(ui, model);
}
- public static void refreshTreeDetailActions(JDetailTab ui, LoggableElementTreeNode node) {
- MainUIRefreshHelper.refreshTreeActions(ui.getCollapseAllDetail(), ui.getExpandAllDetail(), node);
+ public static void refreshTreeDetailActions(JDetailTab ui, EntityTreeNode node) {
+ EntityTreeNodeHelper.refreshTreeActions(ui.getCollapseAllDetail(), ui.getExpandAllDetail(), node);
}
- public static void refreshDownloadElementAction(JDetailTab ui, DetailTabModel model, LoggableElementTreeNode node) {
+ public static void refreshDownloadElementAction(JDetailTab ui, DetailTabModel model, EntityTreeNode node) {
MetaData detail = model.getDetail();
boolean enabled = EntityHelper.Action.DOWNLOAD.accept(node);
String tooltip = !enabled ? null : _("simexplorer.action.downloadLoggableElement.tooltip", detail == null ? node.getUserObject() : detail.getName() + " [" + model.getSelectedVersion() + "]");
@@ -106,7 +115,7 @@
public static void refreshDetailToTreeAction(JDetailTab ui, DetailTabModel model) {
MetaData detail = model.getDetail();
- LoggableElementTreeNode rootNode = model.getHistory().getCurrent();
+ EntityTreeNode rootNode = model.getHistory().getCurrent();
LoggableElement rootElement = (LoggableElement) rootNode.getUserObject();
MetaData data = rootElement.getMetaData();
Version version = model.getSelectedVersion();
@@ -128,7 +137,7 @@
MainUIRefreshHelper.updateButton(ui.getShowTab_synchronize(), enabled, tooltip);
}
- protected static void refreshExportAction(JDetailTab ui, DetailTabModel model) {
+ public static void refreshExportAction(JDetailTab ui, DetailTabModel model) {
MetaData detail = model.getDetail();
LoggableElement sNode = model.getSelectedNode();
//boolean enabled = sNode != null && SimExplorer.getContext().isConnected() && sNode instanceof ExplorationApplication;
@@ -178,11 +187,13 @@
((DetailTableModel) ui.getDetailTable().getModel()).setData(null);
}
- public static void updateDetailNavigationTree(JDetailTab ui, HistoryModel<LoggableElementTreeNode> model) {
+ public static void updateDetailNavigationTree(JDetailTab ui, HistoryModel<EntityTreeNode> model) {
// push it in tree model
((DefaultTreeModel) ui.getNavigationTree().getModel()).setRoot(model.getCurrent());
// by default select the root node
- ui.getNavigationTree().setSelectionRow(0);
+ if (ui.getNavigationTree().getModel().getRoot()!=null) {
+ ui.getNavigationTree().setSelectionRow(0);
+ }
boolean enabled;
enabled = model.size() > 1 && model.hasPrevious();
MainUIRefreshHelper.updateButton(ui.getHistoryPrevious(), enabled, !enabled ? null : _("simexplorer.action.historyPrevious.tooltip", model.getPrevious()));
@@ -193,7 +204,9 @@
public static void updateDetailPanel(Integer index, final JDetailTab ui, DetailTabModel model, LoggableElement selectedNode) {
MetaData detail = model.getDetail();
ui.getDetailVersions().setVisible(true);
- ui.getDetailVersions().setSelectedIndex(index);
+ if (ui.getDetailVersions().getItemCount()>0) {
+ ui.getDetailVersions().setSelectedIndex(index);
+ }
ui.getDetailHeader().setText(selectedNode.getMetaData().getName());
ui.getDetailDescriptorsHeader().setText(_("simexplorer.node.descriptors", detail.getDescriptors().size()));
ui.getDetailType().setText(EntityHelper.Type.getLibelle(detail));
Copied: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/EntityTreeNodeHelper.java (from rev 1038, trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/TreeNodeBuilder.java)
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/EntityTreeNodeHelper.java (rev 0)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/EntityTreeNodeHelper.java 2008-02-17 15:53:30 UTC (rev 1041)
@@ -0,0 +1,311 @@
+/*
+* ##% Copyright (C) 2007, 2008 Code Lutin,
+* Tony Chemit, Gabriel Landais
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+* ##% */
+package fr.cemagref.simexplorer.is.ui.swing;
+
+import static fr.cemagref.simexplorer.is.entities.EntityHelper.Type.Code;
+import static fr.cemagref.simexplorer.is.entities.EntityHelper.Type.Component;
+import static fr.cemagref.simexplorer.is.entities.EntityHelper.Type.Constant;
+import static fr.cemagref.simexplorer.is.entities.EntityHelper.Type.ConstantValue;
+import static fr.cemagref.simexplorer.is.entities.EntityHelper.Type.ExplorationData;
+import static fr.cemagref.simexplorer.is.entities.EntityHelper.Type.Library;
+import static fr.cemagref.simexplorer.is.entities.EntityHelper.Type.Structure;
+import fr.cemagref.simexplorer.is.entities.EntityVisitable;
+import fr.cemagref.simexplorer.is.entities.SimpleEntityVisitor;
+import fr.cemagref.simexplorer.is.entities.data.Code;
+import fr.cemagref.simexplorer.is.entities.data.Component;
+import fr.cemagref.simexplorer.is.entities.data.Constant;
+import fr.cemagref.simexplorer.is.entities.data.ConstantValue;
+import fr.cemagref.simexplorer.is.entities.data.ExplorationApplication;
+import fr.cemagref.simexplorer.is.entities.data.ExplorationData;
+import fr.cemagref.simexplorer.is.entities.data.Library;
+import fr.cemagref.simexplorer.is.entities.data.LoggableElement;
+import fr.cemagref.simexplorer.is.entities.data.Result;
+import fr.cemagref.simexplorer.is.entities.data.Structure;
+import fr.cemagref.simexplorer.is.entities.metadata.MetaData;
+import fr.cemagref.simexplorer.is.ui.swing.model.EntityTreeNode;
+import static org.codelutin.i18n.I18n._;
+
+import javax.swing.AbstractButton;
+import javax.swing.JTree;
+import javax.swing.tree.TreePath;
+import java.util.Collection;
+
+/**
+ * La classe responsable de la création des arbres de {@link fr.cemagref.simexplorer.is.ui.swing.model.EntityTreeNode}
+ * à partir de {@link LoggableElement} .
+ * <p/>
+ * La classe possède une instance cachée par thread qui délègue la construction
+ * del'arbre de navigation à un visiteur de {@link LoggableElement}.
+ * <p/>
+ *
+ * @author chemit
+ */
+public class EntityTreeNodeHelper {
+
+ /** L'instance cachée de builder par Thread. */
+ protected static final ThreadLocal<EntityVisitorBuilder> builder =
+ new ThreadLocal<EntityVisitorBuilder>() {
+ @Override
+ protected EntityVisitorBuilder initialValue() {
+ return new EntityVisitorBuilder();
+ }
+ };
+
+ /**
+ * Construit un arbre de navigation à partir d'un {@link LoggableElement}.
+ *
+ * @param v la donnée à visiter
+ * @param remote flag pour indiquer si on travaille sur des données locales
+ * ou en remote.
+ * @return le noeud parent de l'arbre de nivation construit.
+ */
+ public static EntityTreeNode build(LoggableElement v, boolean remote) {
+ EntityVisitorBuilder instance;
+ synchronized (instance = EntityTreeNodeHelper.builder.get()) {
+ EntityTreeNode result;
+ // walk
+ result = instance.visit(v, remote);
+ return result;
+ }
+ }
+
+ public static EntityTreeNode getSelectedNodeOrRootNode(JTree tree) {
+ EntityTreeNode node = getSelectedNode(tree);
+ if (node == null) {
+ return getRootNode(tree);
+ }
+ return node;
+ }
+
+ public static EntityTreeNode getSelectedNode(JTree tree) {
+ TreePath path = tree.getSelectionPath();
+ EntityTreeNode node = null;
+ if (path != null) {
+ Object o = path.getLastPathComponent();
+ if (o != null && !(o instanceof EntityTreeNode)) {
+ return null;
+ }
+ node = (EntityTreeNode) o;
+ }
+ return node;
+ }
+
+ public static EntityTreeNode getRootNode(JTree tree) {
+ EntityTreeNode node;
+ // take the root node
+ Object root = tree.getModel().getRoot();
+ if (root == null || !(root instanceof EntityTreeNode)) {
+ return null;
+ }
+ node = (EntityTreeNode) root;
+ return node;
+ }
+
+ public static void refreshTreeActions(AbstractButton collapseButton, AbstractButton expandButton, EntityTreeNode node) {
+ String tooltip;
+ boolean enabled = node != null && !node.isLeaf() && node.getChildCount() > 0;
+ tooltip = !enabled ? null : _("simexplorer.action.collapseAll.tooltip", node.getUserObject());
+ MainUIRefreshHelper.updateButton(collapseButton, enabled, tooltip);
+ tooltip = !enabled ? null : _("simexplorer.action.expandAll.tooltip", node.getUserObject());
+ MainUIRefreshHelper.updateButton(expandButton, enabled, tooltip);
+ }
+
+ protected EntityTreeNodeHelper() {
+ // no instance
+ }
+
+ /**
+ * Implantation de {@link SimpleEntityVisitor} pour construire l'arbre
+ * de navigation d'un {@link LoggableElement}.
+ * <p/>
+ * Cette classe est stateless, tous ces états internes doivent être nettoyé
+ * après une visite, en utilisant la méthode {@link #reset()}.
+ * <p/>
+ */
+ public static class EntityVisitorBuilder extends SimpleEntityVisitor {
+
+ /**
+ * le noeud parent de tous les autres.
+ * <p/>
+ * Ce noeud est positionné par la méthode
+ * {@link #markRootNode(EntityTreeNode)}.
+ */
+ protected EntityTreeNode rootNode;
+
+ /**
+ * flag qui indique si on travaille sur des objet locaux ou distants.
+ * <p/>
+ * Cette information est conservé dans les nodes pour permettre de gérer
+ * de manière transparent des objet locaux ou distants.
+ */
+ protected Boolean remote;
+
+ /** les nodes internes utilisés pendant la visite. */
+ protected EntityTreeNode explorationApplication,
+ component,
+ explorationData,
+ components,
+ explorationDatas,
+ libraries,
+ constants,
+ strutures,
+ codes,
+ constantValues;
+
+ public EntityTreeNode visit(EntityVisitable v, boolean remote) {
+ reset();
+ try {
+ this.remote = remote;
+ super.visit(v);
+ EntityTreeNode result;
+ result = this.rootNode;
+ return result;
+ } finally {
+ reset();
+ }
+ }
+
+ @Override
+ public void visitMetaData(MetaData v) {
+ // do not visit meta data (for the moment we dont need thoses
+ // informations in navigation tree), but it could be interresting
+ // for example to display attchments here ?
+ }
+
+ @Override
+ public void visitExplorationApplication(ExplorationApplication v) {
+ markRootNode(explorationApplication = new EntityTreeNode(explorationDatas, v, remote, true));
+ super.visitExplorationApplication(v);
+ }
+
+ @Override
+ public void visitComponent(Component v) {
+ markRootNode(component = new EntityTreeNode(components, v, remote, true));
+ super.visitComponent(v);
+ }
+
+ @Override
+ public void visitExplorationData(ExplorationData v) {
+ markRootNode(explorationData = new EntityTreeNode(explorationDatas, v, remote, true));
+ super.visitExplorationData(v);
+ }
+
+ @Override
+ public void visitCodes(Collection<Code> vs) {
+ codes = new EntityTreeNode(component, Code.getLibelles(), remote, true);
+ super.visitCodes(vs);
+ }
+
+ @Override
+ public void visitComponents(Collection<Component> vs) {
+ components = new EntityTreeNode(explorationApplication, Component.getLibelles(), remote, true);
+ super.visitComponents(vs);
+ }
+
+ @Override
+ public void visitConstants(Collection<Constant> vs) {
+ constants = new EntityTreeNode(component, Constant.getLibelles(), remote, true);
+ super.visitConstants(vs);
+ }
+
+ @Override
+ public void visitConstantValues(Collection<ConstantValue> vs) {
+ constantValues = new EntityTreeNode(explorationData, ConstantValue.getLibelles(), remote, true);
+ super.visitConstantValues(vs);
+ }
+
+ @Override
+ public void visitExplorationDatas(Collection<ExplorationData> vs) {
+ explorationDatas = new EntityTreeNode(explorationApplication, ExplorationData.getLibelles(), remote, true);
+ super.visitExplorationDatas(vs);
+ }
+
+ @Override
+ public void visitLibraries(Collection<Library> vs) {
+ libraries = new EntityTreeNode(component, Library.getLibelles(), remote, true);
+ super.visitLibraries(vs);
+ }
+
+ @Override
+ public void visitStructures(Collection<Structure> vs) {
+ strutures = new EntityTreeNode(component, Structure.getLibelles(), remote, true);
+ super.visitStructures(vs);
+ }
+
+ @Override
+ public void visitConstant(Constant v) {
+ markRootNode(new EntityTreeNode(constants, v, remote, false));
+ }
+
+ @Override
+ public void visitLibrary(Library v) {
+ markRootNode(new EntityTreeNode(libraries, v, remote, false));
+ }
+
+ @Override
+ public void visitResult(Result v) {
+ if (v != null) {
+ markRootNode(new EntityTreeNode(explorationData, v, remote, false));
+ }
+ }
+
+ @Override
+ public void visitCode(Code v) {
+ new EntityTreeNode(codes, v, remote, false);
+ }
+
+ @Override
+ public void visitConstantValue(ConstantValue v) {
+ new EntityTreeNode(
+ new EntityTreeNode(constantValues, v.getConstant().getName(), remote, true),
+ v.getValue(), remote, false);
+ }
+
+ @Override
+ public void visitStructure(Structure v) {
+ new EntityTreeNode(strutures, v, remote, false);
+ }
+
+ /**
+ * Tente de marquerle node donné comme noeud ancêtre de tous les autres.
+ * <p/>
+ * Le positionnement n'a lieu que si on a pas encore de rootNode.
+ *
+ * @param node le node a positionner comme rootNode (si nessecaire)
+ */
+ protected void markRootNode(EntityTreeNode node) {
+ if (rootNode == null) {
+ rootNode = node;
+ }
+ }
+
+ /**
+ * La méthode pour réinitialiser les états interne de la classe.
+ * <p/>
+ * Cette méthode doit être appeler après chaque visite, afin d'assurer
+ * la propriété stateless de la classe.
+ */
+ protected void reset() {
+ remote = null;
+ rootNode = explorationApplication = explorationDatas = explorationData
+ = components = component = constants = codes = libraries
+ = constantValues = null;
+ }
+ }
+}
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/ListTabRefreshHelper.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/ListTabRefreshHelper.java 2008-02-17 15:53:04 UTC (rev 1040)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/ListTabRefreshHelper.java 2008-02-17 15:53:30 UTC (rev 1041)
@@ -21,12 +21,14 @@
import fr.cemagref.simexplorer.is.entities.EntityHelper;
import fr.cemagref.simexplorer.is.entities.metadata.MetaData;
import fr.cemagref.simexplorer.is.ui.SimExplorer;
+import fr.cemagref.simexplorer.is.ui.swing.model.DataEntityModel;
import fr.cemagref.simexplorer.is.ui.swing.model.ListTabModel;
import fr.cemagref.simexplorer.is.ui.swing.model.PaginationModel;
import static org.codelutin.i18n.I18n._;
import javax.swing.JComboBox;
import javax.swing.SwingUtilities;
+import javax.swing.ListSelectionModel;
/**
* Cette classe contient les méthodes utiles et réutilisables pour rafraichir
@@ -64,6 +66,15 @@
// refresh pagination actions
refreshPagination(ui, model.getPagination());
+
+ ListSelectionModel selectionModel = ui.getTable().getSelectionModel();
+ if (!model.isEmpty() && selectionModel.isSelectionEmpty()) {
+ // always select the first row (to init selectedItem)
+ selectionModel.setSelectionInterval(0, 0);
+ } else {
+ selectionModel.clearSelection();
+ }
+
// table data model may have changed, must revalidate
ui.getTable().invalidate();
@@ -74,13 +85,12 @@
}
public static void refreshListTablePopupMenu(final JListTab ui, final ListTabModel model) {
- int index = model.getSelectedIndex();
- if (index == -1) {
- // disable popupmenu
- ui.getTablePopupMenu().setEnabled(false);
+ DataEntityModel item = model.getSelectedItem();
+ ui.getTablePopupMenu().setEnabled(item != null);
+ if (item == null) {
return;
}
- ui.getTablePopupMenu().setEnabled(true);
+ int index = model.getSelectedIndex();
MetaData data = model.get(index);
String text = data.getName() + " [" + data.getVersion() + "]";
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/MainUIRefreshHelper.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/MainUIRefreshHelper.java 2008-02-17 15:53:04 UTC (rev 1040)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/MainUIRefreshHelper.java 2008-02-17 15:53:30 UTC (rev 1041)
@@ -18,21 +18,7 @@
* ##% */
package fr.cemagref.simexplorer.is.ui.swing;
-import fr.cemagref.simexplorer.is.entities.data.LoggableElement;
-import fr.cemagref.simexplorer.is.ui.SimExplorer;
-import fr.cemagref.simexplorer.is.ui.swing.actions.util.ChangeI18nAbstractAction;
-import fr.cemagref.simexplorer.is.ui.swing.model.DetailTabModel;
-import fr.cemagref.simexplorer.is.ui.swing.model.HistoryModel;
-import fr.cemagref.simexplorer.is.ui.swing.model.LoggableElementTreeNode;
-import fr.cemagref.simexplorer.is.ui.swing.model.ListTabModel;
-import org.codelutin.i18n.CountryEnum;
-import org.codelutin.i18n.LanguageEnum;
-
import javax.swing.AbstractButton;
-import javax.swing.JTabbedPane;
-import javax.swing.JTree;
-import javax.swing.tree.TreePath;
-import java.util.regex.Matcher;
/**
* Cette classe contient les méthodes utiles et réutilisables pour rafraichit
@@ -50,160 +36,109 @@
*/
public class MainUIRefreshHelper {
- /**
- * Rafraichit les actions i18n dans le menu en fonction de la locale
- * actuellement utilisée.
- *
- * @param ui l'ui principale
- */
- public static void refreshI18nActions(SimExplorerMainUI ui) {
- LanguageEnum language = SimExplorer.getContext().getConfig().getUserLanguage();
- CountryEnum country = SimExplorer.getContext().getConfig().getUserCountry();
- String[] actions = SimExplorerActionManager.getFactory().getActionNames();
- for (String actionName : actions) {
- Matcher matcher = ChangeI18nAbstractAction.PATTERN_NAME.matcher(actionName);
- if (!matcher.matches()) {
- continue;
- }
- AbstractButton button = (AbstractButton) ui.getObjectById(actionName);
- ChangeI18nAbstractAction action = (ChangeI18nAbstractAction) button.getAction();
- boolean enable = !action.equalsLocale(language, country);
- button.setEnabled(enable);
- }
- }
- /**
- * Rafraichit les uis après un changement de status de connexion de l'utilisateur.
- * <p/>
- * Si l'utilisateur est déconnecté, alors toutes les ui et actions liées au
- * mode remote sont fermées et les actions correspondantes sont rendues
- * inaccessibles.
- *
- * @param ui l'ui principale
- * @param isConnected flag pour indique si l'utiliseur est connecté
- * @param history l'historique de l'onglet de detail
- */
- public static void refreshConnnectState(SimExplorerMainUI ui, final boolean isConnected, HistoryModel<LoggableElementTreeNode> history) {
-
- //SwingUtilities.invokeLater(new Runnable() {
- // public void run() {
- ui.getConnect().setEnabled(!isConnected);
- ui.getUnconnect().setEnabled(isConnected);
- ui.getShowTab_remote().setEnabled(isConnected);
- ui.getToggleTab_remote().setEnabled(isConnected);
-
- JTabbedPane container = ui.getContent();
- DetailTabModel model = (DetailTabModel) SimExplorerTab.detail.getModel();
- JDetailTab tabUI = (JDetailTab) SimExplorerTab.detail.getUI();
- if (!isConnected) {
- // close all connected ui
-
- if (SimExplorerTab.remote.isTabVisible(container)) {
- // close tab
- SimExplorerTab.remote.closeTab(container);
+ public static void refreshExportAction(boolean enabled, boolean remote, String text, AbstractButton button) {
+ String tooltip = null;
+ if (enabled) {
+ if (remote) {
+ tooltip = org.codelutin.i18n.I18n._("simexplorer.action.exportToLocal.tooltip", text);
+ } else {
+ tooltip = org.codelutin.i18n.I18n._("simexplorer.action.exportToRemote.tooltip", text);
}
- if (SimExplorerTab.synchronize.isTabVisible(container)) {
- // close tab
- SimExplorerTab.synchronize.closeTab(container);
- }
- if (SimExplorerTab.detail.isTabVisible(container) && history != null) {
- if (history.isEmpty()) {
- // close tab, no more history
- SimExplorerTab.detail.closeTab(container);
- } else {
- // select current history element
- LoggableElementTreeNode node = history.getCurrent();
- model.setRemote(node.isRemote());
- model.setRootNode((LoggableElement) node.getUserObject());
- DetailTabRefreshHelper.updateDetailNavigationTree(tabUI, model.getHistory());
- }
- }
}
- if (SimExplorerTab.detail.isTabVisible(container)) {
- DetailTabRefreshHelper.refreshSynchroniseAction(tabUI, model);
- DetailTabRefreshHelper.refreshExportAction(tabUI, model);
- }
-
- if (SimExplorerTab.local.isTabVisible(container)) {
- ListTabRefreshHelper.refreshListTablePopupMenu((JListTab)SimExplorerTab.local.getUI(), (ListTabModel) SimExplorerTab.local.getModel());
- }
- // }
- //});
+ updateButton(button, enabled, tooltip);
}
protected static void updateButton(AbstractButton button, boolean enabled, String tooltip) {
button.setEnabled(enabled);
- button.setToolTipText(enabled?tooltip:null);
+ button.setToolTipText(enabled ? tooltip : null);
}
protected MainUIRefreshHelper() {
// do not instanciate me please
}
- public static void refreshTreeActions(AbstractButton collapseButton, AbstractButton expandButton, LoggableElementTreeNode node) {
- String tooltip;
- boolean enabled = node != null && !node.isLeaf() && node.getChildCount() > 0;
- tooltip = !enabled ? null : org.codelutin.i18n.I18n._("simexplorer.action.collapseAll.tooltip", node.getUserObject());
- updateButton(collapseButton, enabled, tooltip);
- tooltip = !enabled ? null : org.codelutin.i18n.I18n._("simexplorer.action.expandAll.tooltip", node.getUserObject());
- updateButton(expandButton, enabled, tooltip);
- }
+}
- public static void refreshExportAction(boolean enabled, boolean remote, String text, AbstractButton button) {
- String tooltip = null;
- if (enabled) {
- if (remote) {
- tooltip = org.codelutin.i18n.I18n._("simexplorer.action.exportToLocal.tooltip", text);
- } else {
- tooltip = org.codelutin.i18n.I18n._("simexplorer.action.exportToRemote.tooltip", text);
- }
- }
- updateButton(button, enabled, tooltip);
- }
+/**
+ * Rafraichit les uis après un changement de status de connexion de l'utilisateur.
+ * <p/>
+ * Si l'utilisateur est déconnecté, alors toutes les ui et actions liées au
+ * mode remote sont fermées et les actions correspondantes sont rendues
+ * inaccessibles.
+ *
+ * @param ui l'ui principale
+ * @param isConnected flag pour indique si l'utiliseur est connecté
+ * @param history l'historique de l'onglet de detail
+ */
+/* public static void refreshConnnectState(SimExplorerMainUI ui, final boolean isConnected, HistoryModel<EntityTreeNode> history) {
- public static LoggableElementTreeNode getSelectedNodeOrRootNode(JTree tree) {
- TreePath path = tree.getSelectionPath();
- LoggableElementTreeNode node = null;
- if (path != null) {
- Object o = path.getLastPathComponent();
- if (o != null && !(o instanceof LoggableElementTreeNode)) {
- return null;
- }
- node = (LoggableElementTreeNode) o;
+ //SwingUtilities.invokeLater(new Runnable() {
+ // public void run() {
+ ui.getConnect().setEnabled(!isConnected);
+ ui.getUnconnect().setEnabled(isConnected);
+ ui.getShowTab_remote().setEnabled(isConnected);
+ ui.getToggleTab_remote().setEnabled(isConnected);
+
+ JTabbedPane container = ui.getContent();
+ DetailTabModel model = (DetailTabModel) SimExplorerTab.detail.getModel();
+ JDetailTab tabUI = (JDetailTab) SimExplorerTab.detail.getUI();
+ if (!isConnected) {
+ // close all connected ui
+
+ if (SimExplorerTab.remote.isTabVisible(container)) {
+ // close tab
+ SimExplorerTab.remote.closeTab(container);
}
- if (node == null) {
- // take the root node
- Object root = tree.getModel().getRoot();
- if (root == null || !(root instanceof LoggableElementTreeNode)) {
- return null;
+ if (SimExplorerTab.synchronize.isTabVisible(container)) {
+ // close tab
+ SimExplorerTab.synchronize.closeTab(container);
+ }
+ if (SimExplorerTab.detail.isTabVisible(container) && history != null) {
+ if (history.isEmpty()) {
+ // close tab, no more history
+ SimExplorerTab.detail.closeTab(container);
+ } else {
+ // select current history element
+ EntityTreeNode node = history.getCurrent();
+ model.synch(node);
+ //model.setRemote(node.isRemote());
+ //model.setRootNode((LoggableElement) node.getUserObject());
+ DetailTabRefreshHelper.updateDetailNavigationTree(tabUI, model.getHistory());
}
- node = (LoggableElementTreeNode) root;
}
- return node;
}
+ if (SimExplorerTab.detail.isTabVisible(container)) {
+ DetailTabRefreshHelper.refreshSynchroniseAction(tabUI, model);
+ DetailTabRefreshHelper.refreshExportAction(tabUI, model);
+ }
- public static LoggableElementTreeNode getSelectedNode(JTree tree) {
- TreePath path = tree.getSelectionPath();
- LoggableElementTreeNode node = null;
- if (path != null) {
- Object o = path.getLastPathComponent();
- if (o != null && !(o instanceof LoggableElementTreeNode)) {
- return null;
- }
- node = (LoggableElementTreeNode) o;
- }
- return node;
+ if (SimExplorerTab.local.isTabVisible(container)) {
+ ListTabRefreshHelper.refreshListTablePopupMenu((JListTab) SimExplorerTab.local.getUI(), (ListTabModel) SimExplorerTab.local.getModel());
}
+ // }
+ //});
+}*/
- public static LoggableElementTreeNode getRootNode(JTree tree) {
- LoggableElementTreeNode node;
- // take the root node
- Object root = tree.getModel().getRoot();
- if (root == null || !(root instanceof LoggableElementTreeNode)) {
- return null;
+/**
+ * Rafraichit les actions i18n dans le menu en fonction de la locale
+ * actuellement utilisée.
+ *
+ * @param ui l'ui principale
+ */
+/*public static void refreshI18nActions(SimExplorerMainUI ui) {
+ LanguageEnum language = SimExplorer.getContext().getConfig().getUserLanguage();
+ CountryEnum country = SimExplorer.getContext().getConfig().getUserCountry();
+ String[] actions = SimExplorerActionManager.getFactory().getActionNames();
+ for (String actionName : actions) {
+ Matcher matcher = ChangeI18nAbstractAction.PATTERN_NAME.matcher(actionName);
+ if (!matcher.matches()) {
+ continue;
}
- node = (LoggableElementTreeNode) root;
- return node;
+ AbstractButton button = (AbstractButton) ui.getObjectById(actionName);
+ ChangeI18nAbstractAction action = (ChangeI18nAbstractAction) button.getAction();
+ boolean enable = !action.equalsLocale(language, country);
+ button.setEnabled(enable);
}
-}
+}*/
\ No newline at end of file
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SimExplorerMainUI.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SimExplorerMainUI.java 2008-02-17 15:53:04 UTC (rev 1040)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SimExplorerMainUI.java 2008-02-17 15:53:30 UTC (rev 1041)
@@ -18,6 +18,11 @@
* ##% */
package fr.cemagref.simexplorer.is.ui.swing;
+import fr.cemagref.simexplorer.is.ui.SimExplorer;
+import fr.cemagref.simexplorer.is.ui.swing.actions.util.ChangeI18nAbstractAction;
+import org.codelutin.i18n.CountryEnum;
+import org.codelutin.i18n.LanguageEnum;
+
import javax.swing.AbstractAction;
import javax.swing.AbstractButton;
import javax.swing.JComponent;
@@ -28,6 +33,7 @@
import java.awt.event.ActionEvent;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
+import java.util.regex.Matcher;
/**
* L'ui principale de l'application
@@ -64,7 +70,7 @@
getRootPane().getActionMap().put("quit", SimExplorerActionManager.newAction("quit", (AbstractButton) null));
// repaint i18n actions
- MainUIRefreshHelper.refreshI18nActions(this);
+ refreshI18nActions();
}
public void setStatus(final String msg) {
@@ -79,4 +85,25 @@
SwingUtilities.invokeLater(runnable);
}
+ /**
+ * Rafraichit les actions i18n dans le menu en fonction de la locale
+ * actuellement utilisée.
+ */
+ public void refreshI18nActions() {
+
+ LanguageEnum language = SimExplorer.getContext().getConfig().getUserLanguage();
+ CountryEnum country = SimExplorer.getContext().getConfig().getUserCountry();
+ String[] actions = SimExplorerActionManager.getFactory().getActionNames();
+ for (String actionName : actions) {
+ Matcher matcher = ChangeI18nAbstractAction.PATTERN_NAME.matcher(actionName);
+ if (!matcher.matches()) {
+ continue;
+ }
+ AbstractButton button = (AbstractButton) getObjectById(actionName);
+ ChangeI18nAbstractAction action = (ChangeI18nAbstractAction) button.getAction();
+ boolean enable = !action.equalsLocale(language, country);
+ button.setEnabled(enable);
+ }
+ }
+
}
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SimExplorerTab.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SimExplorerTab.java 2008-02-17 15:53:04 UTC (rev 1040)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SimExplorerTab.java 2008-02-17 15:53:30 UTC (rev 1041)
@@ -41,7 +41,10 @@
parentImpl = JTabbedPane.class,
name = "simexplorer.tab.detail",
shortDescription = "simexplorer.tab.detail.tooltip"
- )detail,
+ )detail {
+ public <U extends JAXXTab, M extends SimExplorerTabModel> void updateUI(U ui, M model) {
+ DetailTabRefreshHelper.refreshDetailTab((JDetailTab) ui, (DetailTabModel) model);
+ }},
@TabContentConfig(
impl = JListTab.class,
@@ -50,7 +53,10 @@
useToogle = true,
name = "simexplorer.tab.local",
shortDescription = "simexplorer.tab.local.tooltip"
- )local,
+ )local {
+ public <U extends JAXXTab, M extends SimExplorerTabModel> void updateUI(U ui, M model) {
+ ListTabRefreshHelper.refreshListTabUI((JListTab) ui, (ListTabModel) model);
+ }},
@TabContentConfig(
impl = JListTab.class,
@@ -59,7 +65,10 @@
useToogle = true,
name = "simexplorer.tab.remote",
shortDescription = "simexplorer.tab.remote.tooltip"
- )remote,
+ )remote {
+ public <U extends JAXXTab, M extends SimExplorerTabModel> void updateUI(U ui, M model) {
+ ListTabRefreshHelper.refreshListTabUI((JListTab) ui, (ListTabModel) model);
+ }},
@TabContentConfig(
impl = JSynchronizeTab.class,
@@ -68,7 +77,11 @@
useToogle = false,
name = "simexplorer.tab.synchronize",
shortDescription = "simexplorer.tab.synchronize.tooltip"
- )synchronize;
+ )synchronize {
+ public <U extends JAXXTab, M extends SimExplorerTabModel> void updateUI(U ui, M model) {
+ SynchronizeTabRefreshHelper.refreshSynchronizeTab((JSynchronizeTab) ui, (SynchronizeTabModel) model);
+ }
+ };
/** l'usine de tabs */
private static SimExplorerTabFactory factory;
@@ -80,6 +93,8 @@
return factory;
}
+ public abstract <U extends JAXXTab, M extends SimExplorerTabModel> void updateUI(U ui, M model);
+
public JAXXTab getUI() {
return getFactory().getUI(name());
}
@@ -94,10 +109,7 @@
}
public boolean isTabSelected(JTabbedPane container) {
- if (!isTabVisible(container)) {
- return false;
- }
- return getFactory().getTabIndex(container, getUI()) == container.getSelectedIndex();
+ return isTabVisible(container) && getFactory().getTabIndex(container, getUI()) == container.getSelectedIndex();
}
public int getTabIndex(JTabbedPane container) {
@@ -111,8 +123,13 @@
public void closeTab(JTabbedPane container) {
getFactory().closeTab(container, name());
+ getModel().setSelectedItem(null);
}
+ public void updateUI() {
+ updateUI(getUI(), getModel());
+ }
+
public void removePropertyChangeListeners() {
getModel().removePropertyChangeListeners();
}
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SynchronizeTabRefreshHelper.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SynchronizeTabRefreshHelper.java 2008-02-17 15:53:04 UTC (rev 1040)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SynchronizeTabRefreshHelper.java 2008-02-17 15:53:30 UTC (rev 1041)
@@ -20,9 +20,8 @@
import fr.cemagref.simexplorer.is.entities.EntityHelper;
import fr.cemagref.simexplorer.is.entities.data.LoggableElement;
-import fr.cemagref.simexplorer.is.ui.swing.model.LoggableElementTreeNode;
+import fr.cemagref.simexplorer.is.ui.swing.model.EntityTreeNode;
import fr.cemagref.simexplorer.is.ui.swing.model.SynchronizeTabModel;
-import fr.cemagref.simexplorer.is.ui.swing.model.TreeNodeBuilder;
import javax.swing.JTree;
import javax.swing.tree.DefaultTreeModel;
@@ -44,40 +43,16 @@
*/
public class SynchronizeTabRefreshHelper {
- public static void refreshExportElementToRemoteAction(JSynchronizeTab ui, SynchronizeTabModel model) {
- LoggableElement sNode = model.getLocalSelectedNode();
- boolean enabled = EntityHelper.Action.EXPORT.accept(sNode);
- String text = null;
- if (enabled) {
- text = sNode.getMetaData().getName() + " [" + sNode.getMetaData().getVersion() + "]";
- }
- MainUIRefreshHelper.refreshExportAction(enabled, false, text, ui.getExportElementToRemote());
- }
+ protected static void refreshSynchronizeTab(JSynchronizeTab ui, SynchronizeTabModel model) {
+ SynchronizeTabRefreshHelper.refreshTreeLocalActions(ui, null);
+ SynchronizeTabRefreshHelper.refreshTreeRemoteActions(ui, null);
+ SynchronizeTabRefreshHelper.refreshExportElementToLocalAction(ui, model);
+ SynchronizeTabRefreshHelper.refreshExportElementToRemoteAction(ui, model);
- public static void refreshExportElementToLocalAction(JSynchronizeTab ui, SynchronizeTabModel model) {
- LoggableElement sNode = model.getRemoteSelectedNode();
- boolean enabled = EntityHelper.Action.EXPORT.accept(sNode);
- String text = null;
- if (enabled) {
- text = sNode.getMetaData().getName() + " [" + sNode.getMetaData().getVersion() + "]";
- }
- MainUIRefreshHelper.refreshExportAction(enabled, true, text, ui.getExportElementToLocal());
- }
+ boolean remote = model.isRemote();
+ TreeNode sourceRoot = EntityTreeNodeHelper.build(model.getSource(), remote);
+ TreeNode destinationRoot = model.getDestination() == null ? null : EntityTreeNodeHelper.build(model.getDestination(), !remote);
- public static void refreshTreeLocalActions(JSynchronizeTab ui, LoggableElementTreeNode node) {
- MainUIRefreshHelper.refreshTreeActions(ui.getCollapseAllLocal(), ui.getExpandAllLocal(), node);
- }
-
- public static void refreshTreeRemoteActions(JSynchronizeTab ui, LoggableElementTreeNode node) {
- MainUIRefreshHelper.refreshTreeActions(ui.getCollapseAllRemote(), ui.getExpandAllRemote(), node);
- }
-
- public static void updateSynchronizeNavigationTrees(JSynchronizeTab ui, SynchronizeTabModel model) {
-
- boolean remote = model.isRemote();
- TreeNode sourceRoot = TreeNodeBuilder.build(model.getSource(), remote);
- TreeNode destinationRoot = model.getDestination() == null ? null : TreeNodeBuilder.build(model.getDestination(), !remote);
-
JTree sourceTree, destinationTree;
if (remote) {
// source is remote
@@ -100,11 +75,38 @@
} else {
destinationTree.setSelectionRow(0);
}
- //sourceTree.invalidate();
- //destinationTree.invalidate();
- //ui.repaint();
}
+
+ public static void refreshExportElementToRemoteAction(JSynchronizeTab ui, SynchronizeTabModel model) {
+ LoggableElement sNode = model.getLocalSelectedNode();
+ boolean enabled = EntityHelper.Action.EXPORT.accept(sNode);
+ String text = null;
+ if (enabled) {
+ text = sNode.getMetaData().getName() + " [" + sNode.getMetaData().getVersion() + "]";
+ }
+ MainUIRefreshHelper.refreshExportAction(enabled, false, text, ui.getExportElementToRemote());
+ }
+ public static void refreshExportElementToLocalAction(JSynchronizeTab ui, SynchronizeTabModel model) {
+ LoggableElement sNode = model.getRemoteSelectedNode();
+ boolean enabled = EntityHelper.Action.EXPORT.accept(sNode);
+ String text = null;
+ if (enabled) {
+ text = sNode.getMetaData().getName() + " [" + sNode.getMetaData().getVersion() + "]";
+ }
+ MainUIRefreshHelper.refreshExportAction(enabled, true, text, ui.getExportElementToLocal());
+ }
+
+ public static void refreshTreeLocalActions(JSynchronizeTab ui, EntityTreeNode node) {
+ EntityTreeNodeHelper.refreshTreeActions(ui.getCollapseAllLocal(), ui.getExpandAllLocal(), node);
+ }
+
+ public static void refreshTreeRemoteActions(JSynchronizeTab ui, EntityTreeNode node) {
+ EntityTreeNodeHelper.refreshTreeActions(ui.getCollapseAllRemote(), ui.getExpandAllRemote(), node);
+ }
+
+
+
protected SynchronizeTabRefreshHelper() {
// do not instanciate me please
}
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ChangePageAction.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ChangePageAction.java 2008-02-17 15:53:04 UTC (rev 1040)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ChangePageAction.java 2008-02-17 15:53:30 UTC (rev 1041)
@@ -18,12 +18,12 @@
* ##% */
package fr.cemagref.simexplorer.is.ui.swing.actions;
-import fr.cemagref.simexplorer.is.ui.swing.SimExplorerActionManager;
import fr.cemagref.simexplorer.is.ui.swing.JListTab;
import fr.cemagref.simexplorer.is.ui.swing.ListTabRefreshHelper;
+import fr.cemagref.simexplorer.is.ui.swing.SimExplorerActionManager;
import fr.cemagref.simexplorer.is.ui.swing.actions.util.SimExplorerAbstractTabAction;
+import fr.cemagref.simexplorer.is.ui.swing.model.ListTabModel;
import fr.cemagref.simexplorer.is.ui.swing.model.ListTableModel;
-import fr.cemagref.simexplorer.is.ui.swing.model.ListTabModel;
import fr.cemagref.simexplorer.is.ui.swing.model.PaginationModel;
import javax.swing.AbstractAction;
@@ -92,10 +92,18 @@
modelTab.setData(model.getList());
// refresh ui
- ListTabRefreshHelper.refreshListTabUI(container, model);
+ //ListTabRefreshHelper.refreshListTabUI(container, model);
}
@Override
+ public void updateUI() {
+ super.updateUI();
+ // refresh ui
+ getTab().updateUI();
+ //ListTabRefreshHelper.refreshListTabUI((JListTab) getUI(), (ListTabModel) getModel());
+ }
+
+ @Override
protected void clear() {
setTab(null);
newPage = null;
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ChangeSizorAction.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ChangeSizorAction.java 2008-02-17 15:53:04 UTC (rev 1040)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ChangeSizorAction.java 2008-02-17 15:53:30 UTC (rev 1041)
@@ -89,10 +89,17 @@
modelTab.setData(model.getList());
// refresh ui
- ListTabRefreshHelper.refreshListTabUI(container, model);
+ //ListTabRefreshHelper.refreshListTabUI(container, model);
}
@Override
+ public void updateUI() {
+ super.updateUI();
+ // refresh ui
+ getTab().updateUI();
+ }
+
+ @Override
protected void clear() {
setTab(null);
newWidth = null;
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/CollapseAllAction.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/CollapseAllAction.java 2008-02-17 15:53:04 UTC (rev 1040)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/CollapseAllAction.java 2008-02-17 15:53:30 UTC (rev 1041)
@@ -20,9 +20,9 @@
import fr.cemagref.simexplorer.is.ui.swing.JDetailTab;
import fr.cemagref.simexplorer.is.ui.swing.JSynchronizeTab;
-import fr.cemagref.simexplorer.is.ui.swing.MainUIRefreshHelper;
+import fr.cemagref.simexplorer.is.ui.swing.EntityTreeNodeHelper;
import fr.cemagref.simexplorer.is.ui.swing.actions.util.SimExplorerAbstractTabAction;
-import fr.cemagref.simexplorer.is.ui.swing.model.LoggableElementTreeNode;
+import fr.cemagref.simexplorer.is.ui.swing.model.EntityTreeNode;
import javax.swing.JTree;
import java.awt.event.ActionEvent;
@@ -45,7 +45,7 @@
private static final long serialVersionUID = -3254708595851406041L;
JTree tree;
- LoggableElementTreeNode node;
+ EntityTreeNode node;
public CollapseAllAction(String name) {
super(name);
@@ -72,7 +72,7 @@
// arbre non trouvé (cela devrait souleve une exception !)
return false;
}
- node = MainUIRefreshHelper.getSelectedNodeOrRootNode(tree);
+ node = EntityTreeNodeHelper.getSelectedNodeOrRootNode(tree);
boolean result;
result = !(node == null || node.isLeaf());
return result;
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ConnectAction.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ConnectAction.java 2008-02-17 15:53:04 UTC (rev 1040)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ConnectAction.java 2008-02-17 15:53:30 UTC (rev 1041)
@@ -18,21 +18,27 @@
* ##% */
package fr.cemagref.simexplorer.is.ui.swing.actions;
-import static org.codelutin.i18n.I18n._;
-
-import java.awt.event.ActionEvent;
-
-import javax.swing.JOptionPane;
-
import fr.cemagref.simexplorer.is.exceptions.SimExplorerException;
+import fr.cemagref.simexplorer.is.exceptions.SimExplorerRuntimeException;
import fr.cemagref.simexplorer.is.service.AuthenticationServiceHelper;
import fr.cemagref.simexplorer.is.service.StorageService;
-import fr.cemagref.simexplorer.is.exceptions.SimExplorerRuntimeException;
import fr.cemagref.simexplorer.is.ui.StorageServiceHelper;
+import fr.cemagref.simexplorer.is.ui.swing.DetailTabRefreshHelper;
+import fr.cemagref.simexplorer.is.ui.swing.JDetailTab;
+import fr.cemagref.simexplorer.is.ui.swing.JListTab;
+import fr.cemagref.simexplorer.is.ui.swing.ListTabRefreshHelper;
import fr.cemagref.simexplorer.is.ui.swing.LoginUI;
-import fr.cemagref.simexplorer.is.ui.swing.MainUIRefreshHelper;
+import fr.cemagref.simexplorer.is.ui.swing.SimExplorerMainUI;
+import fr.cemagref.simexplorer.is.ui.swing.SimExplorerTab;
import fr.cemagref.simexplorer.is.ui.swing.actions.util.SimExplorerAbstractAction;
+import fr.cemagref.simexplorer.is.ui.swing.model.DetailTabModel;
+import fr.cemagref.simexplorer.is.ui.swing.model.ListTabModel;
+import static org.codelutin.i18n.I18n._;
+import javax.swing.JOptionPane;
+import javax.swing.JTabbedPane;
+import java.awt.event.ActionEvent;
+
/**
* Action de connexion au serveur distant
*
@@ -60,7 +66,7 @@
}
public void disposeUI() {
- ui=null;
+ ui = null;
}
@Override
@@ -77,17 +83,52 @@
super.doAction(e);
String login = getContext().getConfig().getRemoteLogin();
String hashPassword = getContext().getConfig().getRemotePassword();
- if (hashPassword == null || hashPassword.length()==0 || !loginUIHandler.connect(login, hashPassword)) {
+ if (hashPassword == null || hashPassword.length() == 0 || !loginUIHandler.connect(login, hashPassword)) {
ui.launch(login);
}
}
@Override
protected void afterAction(ActionEvent e) throws Exception {
- MainUIRefreshHelper.refreshConnnectState(getMainUI(), getContext().isConnected(), null);
+ updateUI();
}
+ /**
+ * Rafraichit les uis après un changement de status de connexion de l'utilisateur.
+ * <p/>
+ * Si l'utilisateur est déconnecté, alors toutes les ui et actions liées au
+ * mode remote sont fermées et les actions correspondantes sont rendues
+ * inaccessibles.
+ *
+ */
@Override
+ public void updateUI() {
+ SimExplorerMainUI ui = getMainUI();
+
+ //SwingUtilities.invokeLater(new Runnable() {
+ // public void run() {
+ ui.getConnect().setEnabled(false);
+ ui.getUnconnect().setEnabled(true);
+ ui.getShowTab_remote().setEnabled(true);
+ ui.getToggleTab_remote().setEnabled(true);
+
+ JTabbedPane container = ui.getContent();
+ DetailTabModel model = (DetailTabModel) SimExplorerTab.detail.getModel();
+ JDetailTab tabUI = (JDetailTab) SimExplorerTab.detail.getUI();
+
+ if (SimExplorerTab.detail.isTabVisible(container)) {
+ DetailTabRefreshHelper.refreshSynchroniseAction(tabUI, model);
+ DetailTabRefreshHelper.refreshExportAction(tabUI, model);
+ }
+
+ if (SimExplorerTab.local.isTabVisible(container)) {
+ ListTabRefreshHelper.refreshListTablePopupMenu((JListTab) SimExplorerTab.local.getUI(), (ListTabModel) SimExplorerTab.local.getModel());
+ }
+ // }
+ //});
+ }
+
+ @Override
protected void clear() {
super.clear();
}
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/DetailToTreeAction.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/DetailToTreeAction.java 2008-02-17 15:53:04 UTC (rev 1040)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/DetailToTreeAction.java 2008-02-17 15:53:30 UTC (rev 1041)
@@ -25,8 +25,8 @@
import fr.cemagref.simexplorer.is.ui.swing.JDetailTab;
import fr.cemagref.simexplorer.is.ui.swing.actions.util.SimExplorerAbstractTabAction;
import fr.cemagref.simexplorer.is.ui.swing.model.DetailTabModel;
-import fr.cemagref.simexplorer.is.ui.swing.model.LoggableElementTreeNode;
-import fr.cemagref.simexplorer.is.ui.swing.model.TreeNodeBuilder;
+import fr.cemagref.simexplorer.is.ui.swing.model.EntityTreeNode;
+import fr.cemagref.simexplorer.is.ui.swing.EntityTreeNodeHelper;
import java.awt.event.ActionEvent;
@@ -47,7 +47,7 @@
)
public class DetailToTreeAction extends SimExplorerAbstractTabAction {
- LoggableElementTreeNode node;
+ EntityTreeNode node;
LoggableElement element;
String uuid;
Version version;
@@ -75,7 +75,7 @@
protected void doAction(ActionEvent e) throws Exception {
model.setRootNode(element);
// create navigation tree
- LoggableElementTreeNode root = TreeNodeBuilder.build(model.getRootNode(), model.isRemote());
+ EntityTreeNode root = EntityTreeNodeHelper.build(model.getRootNode(), model.isRemote());
model.getHistory().add(root);
// push it in tree
DetailTabRefreshHelper.updateDetailNavigationTree((JDetailTab) getUI(), model.getHistory());
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ExpandAllAction.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ExpandAllAction.java 2008-02-17 15:53:04 UTC (rev 1040)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ExpandAllAction.java 2008-02-17 15:53:30 UTC (rev 1041)
@@ -20,9 +20,9 @@
import fr.cemagref.simexplorer.is.ui.swing.JDetailTab;
import fr.cemagref.simexplorer.is.ui.swing.JSynchronizeTab;
-import fr.cemagref.simexplorer.is.ui.swing.MainUIRefreshHelper;
import fr.cemagref.simexplorer.is.ui.swing.actions.util.SimExplorerAbstractTabAction;
-import fr.cemagref.simexplorer.is.ui.swing.model.LoggableElementTreeNode;
+import fr.cemagref.simexplorer.is.ui.swing.model.EntityTreeNode;
+import fr.cemagref.simexplorer.is.ui.swing.EntityTreeNodeHelper;
import javax.swing.JTree;
import java.awt.event.ActionEvent;
@@ -46,7 +46,7 @@
private static final long serialVersionUID = 9033359716418852179L;
JTree tree;
- LoggableElementTreeNode node;
+ EntityTreeNode node;
public ExpandAllAction(String name) {
super(name);
@@ -74,7 +74,7 @@
return false;
}
- node = MainUIRefreshHelper.getSelectedNodeOrRootNode(tree);
+ node = EntityTreeNodeHelper.getSelectedNodeOrRootNode(tree);
boolean result;
result = !(node == null || node.isLeaf());
return result;
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/HistoryNextAction.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/HistoryNextAction.java 2008-02-17 15:53:04 UTC (rev 1040)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/HistoryNextAction.java 2008-02-17 15:53:30 UTC (rev 1041)
@@ -18,12 +18,11 @@
* ##% */
package fr.cemagref.simexplorer.is.ui.swing.actions;
-import fr.cemagref.simexplorer.is.entities.data.LoggableElement;
import fr.cemagref.simexplorer.is.ui.swing.DetailTabRefreshHelper;
import fr.cemagref.simexplorer.is.ui.swing.JDetailTab;
import fr.cemagref.simexplorer.is.ui.swing.actions.util.SimExplorerAbstractTabAction;
import fr.cemagref.simexplorer.is.ui.swing.model.DetailTabModel;
-import fr.cemagref.simexplorer.is.ui.swing.model.LoggableElementTreeNode;
+import fr.cemagref.simexplorer.is.ui.swing.model.EntityTreeNode;
import java.awt.event.ActionEvent;
@@ -58,9 +57,10 @@
@Override
protected void doAction(ActionEvent e) throws Exception {
- LoggableElementTreeNode node = model.getHistory().gotoNext();
- model.setRemote(node.isRemote());
- model.setRootNode((LoggableElement) node.getUserObject());
+ EntityTreeNode node = model.getHistory().gotoNext();
+ model.synch(node);
+ //model.setRemote(node.isRemote());
+ //model.setRootNode((LoggableElement) node.getUserObject());
DetailTabRefreshHelper.updateDetailNavigationTree((JDetailTab) getUI(), model.getHistory());
}
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/HistoryPreviousAction.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/HistoryPreviousAction.java 2008-02-17 15:53:04 UTC (rev 1040)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/HistoryPreviousAction.java 2008-02-17 15:53:30 UTC (rev 1041)
@@ -18,12 +18,11 @@
* ##% */
package fr.cemagref.simexplorer.is.ui.swing.actions;
-import fr.cemagref.simexplorer.is.entities.data.LoggableElement;
import fr.cemagref.simexplorer.is.ui.swing.DetailTabRefreshHelper;
import fr.cemagref.simexplorer.is.ui.swing.JDetailTab;
import fr.cemagref.simexplorer.is.ui.swing.actions.util.SimExplorerAbstractTabAction;
import fr.cemagref.simexplorer.is.ui.swing.model.DetailTabModel;
-import fr.cemagref.simexplorer.is.ui.swing.model.LoggableElementTreeNode;
+import fr.cemagref.simexplorer.is.ui.swing.model.EntityTreeNode;
import java.awt.event.ActionEvent;
@@ -58,9 +57,8 @@
@Override
protected void doAction(ActionEvent e) throws Exception {
- LoggableElementTreeNode node = model.getHistory().gotoPrevious();
- model.setRemote(node.isRemote());
- model.setRootNode((LoggableElement) node.getUserObject());
+ EntityTreeNode node = model.getHistory().gotoPrevious();
+ model.synch(node);
DetailTabRefreshHelper.updateDetailNavigationTree((JDetailTab) getUI(), model.getHistory());
}
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ResetSearchAction.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ResetSearchAction.java 2008-02-17 15:53:04 UTC (rev 1040)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ResetSearchAction.java 2008-02-17 15:53:30 UTC (rev 1041)
@@ -59,7 +59,8 @@
if (!model.getQuery().hasQuery()) {
// directly refresh search actions
// but do not realize action
- ListTabRefreshHelper.refreshSearchActions(ui,model);
+ updateUI();
+ //ListTabRefreshHelper.refreshSearchActions(ui,model);
return false;
}
// only reset search if something was previously search
@@ -87,10 +88,17 @@
modelTab.setData(model.getList());
// refresh ui
- ListTabRefreshHelper.refreshListTabUI(container, model);
+ //ListTabRefreshHelper.refreshListTabUI(container, model);
}
@Override
+ public void updateUI() {
+ super.updateUI();
+ // refresh ui
+ getTab().updateUI();
+ }
+
+ @Override
protected void clear() {
super.clear();
setTab(null);
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/SearchAction.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/SearchAction.java 2008-02-17 15:53:04 UTC (rev 1040)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/SearchAction.java 2008-02-17 15:53:30 UTC (rev 1041)
@@ -79,10 +79,17 @@
modelTab.setData(model.getList());
// refresh ui
- ListTabRefreshHelper.refreshListTabUI(container, model);
+ //ListTabRefreshHelper.refreshListTabUI(container, model);
}
@Override
+ public void updateUI() {
+ super.updateUI();
+ // refresh ui
+ getTab().updateUI();
+ }
+
+ @Override
protected void clear() {
super.clear();
query = null;
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ShowDetailTabAction.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ShowDetailTabAction.java 2008-02-17 15:53:04 UTC (rev 1040)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ShowDetailTabAction.java 2008-02-17 15:53:30 UTC (rev 1041)
@@ -23,13 +23,13 @@
import fr.cemagref.simexplorer.is.entities.metadata.Version;
import fr.cemagref.simexplorer.is.ui.StorageServiceHelper;
import fr.cemagref.simexplorer.is.ui.swing.DetailTabRefreshHelper;
+import fr.cemagref.simexplorer.is.ui.swing.EntityTreeNodeHelper;
import fr.cemagref.simexplorer.is.ui.swing.JDetailTab;
-import fr.cemagref.simexplorer.is.ui.swing.MainUIRefreshHelper;
import fr.cemagref.simexplorer.is.ui.swing.SimExplorerTab;
import fr.cemagref.simexplorer.is.ui.swing.actions.util.ShowTabAbstractAction;
+import fr.cemagref.simexplorer.is.ui.swing.model.DataEntityModel;
import fr.cemagref.simexplorer.is.ui.swing.model.DetailTabModel;
-import fr.cemagref.simexplorer.is.ui.swing.model.LoggableElementTreeNode;
-import fr.cemagref.simexplorer.is.ui.swing.model.TreeNodeBuilder;
+import fr.cemagref.simexplorer.is.ui.swing.model.EntityTreeNode;
import javax.swing.DefaultComboBoxModel;
import javax.swing.event.ListSelectionEvent;
@@ -62,22 +62,17 @@
hideActionText = false
)
public class ShowDetailTabAction extends ShowTabAbstractAction<JDetailTab, DetailTabModel> {
+ /** la donnée à afficher dans l'onglet de détail */
+ protected DataEntityModel selected;
+ /** le listener de navigation dans l'arbre */
+ protected NavigationSelectionListener navigationListener;
+ /** le listener de navigation dans les versions */
+ protected VersionSelectionListener versionListener;
+ /** le listener de navigation dans les fichiers attachés */
+ protected AttachmentSelectionListener attachmentListener;
- /** flag pour indiquer si la source vient de la base locale ou distante */
- protected Boolean remote;
- /** l'uuid de l'éléement dont on veut voir les details */
- protected String uuid;
- /** la version de l'élément dont on veut voir les details */
- protected Version version;
-
private static final long serialVersionUID = 6643631041114311643L;
- NavigationSelectionListener navigationListener;
-
- VersionSelectionListener versionListener;
-
- AttachmentSelectionListener attachmentListener;
-
public ShowDetailTabAction(String name) {
super(name);
navigationListener = new NavigationSelectionListener();
@@ -93,29 +88,24 @@
// préparation du modèle de détail
DetailTabModel detailModel = (DetailTabModel) SimExplorerTab.detail.getModel();
+
+ // synchronisation de l'élément sélectionné
+ detailModel.setSelectedItem(selected);
+
// chargement de l'élément à partir du service
- LoggableElement element = StorageServiceHelper.getElement(getContext(), remote, uuid, version.toString());
- // on supprime les anciennes données du modèle
- detailModel.reset();
- // positionnement du type de détail (local ou remote)
- detailModel.setRemote(remote);
+ // délégué au model de selection
+ LoggableElement element = (LoggableElement) detailModel.getSelectedItem().get(getContext());
+
// positionnement du rootNode du modèle
detailModel.setRootNode(element);
- return element!=null;
- }
- public void setRemote(Boolean remote) {
- this.remote = remote;
+ return element != null;
}
- public void setUuid(String uuid) {
- this.uuid = uuid;
+ public void setSelected(DataEntityModel selected) {
+ this.selected = selected;
}
- public void setVersion(Version version) {
- this.version = version;
- }
-
protected void initFirstUsage(final JDetailTab ui, final DetailTabModel model) {
// add a listener on navigation tree
ui.getNavigationTree().addTreeSelectionListener(navigationListener);
@@ -125,21 +115,10 @@
ui.getDetailAttachments().addListSelectionListener(attachmentListener);
}
- protected void initUI(JDetailTab ui, DetailTabModel model) {
- DetailTabRefreshHelper.refreshTreeDetailActions(ui, null);
- // create navigation tree
- LoggableElementTreeNode root = TreeNodeBuilder.build(model.getRootNode(), model.isRemote());
- model.getHistory().add(root);
- DetailTabRefreshHelper.updateDetailNavigationTree(ui, model.getHistory());
- }
-
@Override
protected void clear() {
super.clear();
- uuid=null;
- version=null;
- remote=null;
- //setTab(null);
+ selected = null;
}
/**
@@ -157,16 +136,11 @@
DetailTabModel model = getTabModel();
TreePath path = e.getNewLeadSelectionPath();
- LoggableElementTreeNode node = null;
+ EntityTreeNode node = null;
if (path != null) {
- node = (LoggableElementTreeNode) path.getLastPathComponent();
+ node = (EntityTreeNode) path.getLastPathComponent();
}
- //TODO on ne doit pas modifier les ui dans cette méthode
- // on rafraichit toujours ici les actions de l'arbre qui sont
- // indépendantes du model et dépendent juste dunoeud sélectionné
- DetailTabRefreshHelper.refreshTreeDetailActions(getTabUI(), node);
- Object o = node == null ? null : node.getUserObject();
// always reset version index, in that way, if there is no more
// version list, nothing will be trigger by setting selectedVersion
// null, it means also that we have to reset detail always from this
@@ -175,7 +149,7 @@
model.resetSelectedVersion();
// update history list
- LoggableElement element = node == null || !(node.getUserObject() instanceof LoggableElement) ? null : ((LoggableElement) node.getUserObject());
+ LoggableElement element = node == null ? null : node.getLoggableElement();
boolean history = element != null;
Version selectedVersion;
Integer selectedAttachment;
@@ -194,13 +168,18 @@
model.setDetail(element == null ? null : element.getMetaData());
// le node est acceptable uniquement si c'est un loggableElement
- model.setSelectedNode((LoggableElement) (o instanceof LoggableElement ? o : null));
+ model.setSelectedNode(element);
// on positionne la version selectionnee
model.setSelectedVersion(selectedVersion);
// on positionne l'attachment selectionne
model.setSelectedAttachmentIndex(selectedAttachment);
+
+ //TODO on ne doit pas modifier les ui dans cette méthode
+ // on rafraichit toujours ici les actions de l'arbre qui sont
+ // indépendantes du model et dépendent juste du noeud sélectionné
+ DetailTabRefreshHelper.refreshTreeDetailActions(getTabUI(), node);
}
/**
@@ -211,7 +190,9 @@
* @param evt event coming from DetailTabModel
*/
public void propertyChange(PropertyChangeEvent evt) {
- log.debug(evt.getPropertyName() + " old:" + evt.getOldValue() + ", new:" + evt.getNewValue());
+ if (log.isDebugEnabled()) {
+ log.debug(evt.getPropertyName() + " old:" + evt.getOldValue() + ", new:" + evt.getNewValue());
+ }
JDetailTab ui = getTabUI();
DetailTabModel model = getTabModel();
DefaultComboBoxModel historyModel = (DefaultComboBoxModel) ui.getDetailVersions().getModel();
@@ -227,10 +208,10 @@
versionListener.setEnabled(wasEnable);
attachmentListener.setEnabled(wasEnable2);
// update actions on toolbar
- LoggableElementTreeNode node = MainUIRefreshHelper.getSelectedNode(ui.getNavigationTree());
+ EntityTreeNode node = EntityTreeNodeHelper.getSelectedNode(ui.getNavigationTree());
DetailTabRefreshHelper.refreshDetailActions(ui, model, node);
- LoggableElementTreeNode rootNode = MainUIRefreshHelper.getRootNode(ui.getNavigationTree());
+ EntityTreeNode rootNode = EntityTreeNodeHelper.getRootNode(ui.getNavigationTree());
if (model.getDetail() != null && !node.equals(rootNode)) {
// refresh detail to tree button only if required
DetailTabRefreshHelper.refreshDetailToTreeAction(ui, model);
@@ -254,15 +235,16 @@
JDetailTab ui = getTabUI();
DetailTabModel model = getTabModel();
- MetaData metas;
- //int selectedVersionIndex = ui.getDetailVersions().getSelectedIndex();
+ MetaData metas;
Object selectedItem = ui.getDetailVersions().getSelectedItem();
if (selectedItem == null) {
throw new NullPointerException("can not have a selectedItem null");
}
Integer selectedAttachment;
Version selectedVersion = Version.valueOf(selectedItem.toString());
- log.debug("selected version (" + selectedVersion + ") " + selectedItem);
+ if (log.isDebugEnabled()) {
+ log.debug("selected version (" + selectedVersion + ") " + selectedItem);
+ }
metas = StorageServiceHelper.getMetaData(
getContext(),
model.isRemote(),
@@ -292,7 +274,9 @@
* @param evt property changed event
*/
public void propertyChange(PropertyChangeEvent evt) {
- log.debug(evt.getPropertyName() + " old:" + evt.getOldValue() + ", new:" + evt.getNewValue());
+ if (log.isDebugEnabled()) {
+ log.debug(evt.getPropertyName() + " old:" + evt.getOldValue() + ", new:" + evt.getNewValue());
+ }
Integer index = (Integer) evt.getNewValue();
JDetailTab ui = getTabUI();
DetailTabModel model = getTabModel();
@@ -314,7 +298,7 @@
attachmentListener.setEnabled(wasEnable2);
ui.getDetailAttachments().setSelectedIndex(0);
// update actions on toolbar
- LoggableElementTreeNode node = MainUIRefreshHelper.getSelectedNodeOrRootNode(ui.getNavigationTree());
+ EntityTreeNode node = EntityTreeNodeHelper.getSelectedNodeOrRootNode(ui.getNavigationTree());
DetailTabRefreshHelper.refreshDetailActions(ui, model, node);
}
@@ -348,7 +332,9 @@
throw new NullPointerException("can not have a attachment null");
}
Attachment attachment = (Attachment) selectedItem;
- log.debug("selected attachment (" + attachment + ") " + selectedItem);
+ if (log.isDebugEnabled()) {
+ log.debug("selected attachment (" + attachment + ") " + selectedItem);
+ }
// finally change selectedIndex
model.setSelectedAttachmentIndex(ui.getDetailAttachments().getSelectedIndex());
@@ -362,7 +348,9 @@
* @param evt property changed event
*/
public void propertyChange(PropertyChangeEvent evt) {
- log.debug(evt.getPropertyName() + " old:" + evt.getOldValue() + ", new:" + evt.getNewValue());
+ if (log.isDebugEnabled()) {
+ log.debug(evt.getPropertyName() + " old:" + evt.getOldValue() + ", new:" + evt.getNewValue());
+ }
JDetailTab ui = getTabUI();
DetailTabModel model = getTabModel();
boolean wasEnable = isEnabled();
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ShowSynchronizeTabAction.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ShowSynchronizeTabAction.java 2008-02-17 15:53:04 UTC (rev 1040)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ShowSynchronizeTabAction.java 2008-02-17 15:53:30 UTC (rev 1041)
@@ -21,16 +21,21 @@
import fr.cemagref.simexplorer.is.entities.data.LoggableElement;
import fr.cemagref.simexplorer.is.entities.metadata.Version;
import fr.cemagref.simexplorer.is.ui.StorageServiceHelper;
+import fr.cemagref.simexplorer.is.ui.swing.EntityTreeNodeHelper;
import fr.cemagref.simexplorer.is.ui.swing.JSynchronizeTab;
import fr.cemagref.simexplorer.is.ui.swing.SimExplorerTab;
import fr.cemagref.simexplorer.is.ui.swing.SynchronizeTabRefreshHelper;
import fr.cemagref.simexplorer.is.ui.swing.actions.util.ShowTabAbstractAction;
+import fr.cemagref.simexplorer.is.ui.swing.model.DataEntityModel;
import fr.cemagref.simexplorer.is.ui.swing.model.DetailTabModel;
-import fr.cemagref.simexplorer.is.ui.swing.model.LoggableElementTreeNode;
+import fr.cemagref.simexplorer.is.ui.swing.model.EntityTreeNode;
import fr.cemagref.simexplorer.is.ui.swing.model.SynchronizeTabModel;
+import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
+import javax.swing.tree.DefaultTreeModel;
+import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import java.awt.event.ActionEvent;
import java.beans.PropertyChangeEvent;
@@ -52,12 +57,8 @@
)
public class ShowSynchronizeTabAction extends ShowTabAbstractAction<JSynchronizeTab, SynchronizeTabModel> {
- /** flag pour indiquer si la source vient de la base locale ou distante */
- protected Boolean remote;
- /** l'uuid de l'éléement que l'on veut synchroniser */
- protected String uuid;
- /** la version de l'élément que l'on veut synchroniser */
- protected Version version;
+ protected DataEntityModel selected;
+
private static final long serialVersionUID = -3901398502496915785L;
protected TreeSelectionListener navigationLocalListener;
@@ -70,24 +71,16 @@
navigationRemoteListener = new NavigationRemoteSelectionListener();
}
- public void setRemote(Boolean remote) {
- this.remote = remote;
+ public void setSelected(DataEntityModel selected) {
+ this.selected = selected;
}
- public void setUuid(String uuid) {
- this.uuid = uuid;
- }
-
- public void setVersion(Version version) {
- this.version = version;
- }
-
@Override
protected boolean beforeAction(ActionEvent e) throws Exception {
if (!super.beforeAction(e)) {
return false;
}
- if (remote == null || uuid == null || version == null) {
+ if (selected == null) {
// trick : quand c'est null, cela veut dire que l'on vient de
// l'onglet de detail, car dans les onglets de list, l'action est
// toujours initialisée avant d'arriver ici, alors que dans le cas
@@ -97,35 +90,47 @@
// l'onglet de detail, on a pas de moyen simple de reinitialiser cette
// action, donc on ne l'initialise jamais d'avance dans ce cas.
DetailTabModel model = (DetailTabModel) SimExplorerTab.detail.getModel();
- if (model.getDetail() != null) {
- setRemote(model.isRemote());
- setUuid(model.getDetail().getUuid());
- setVersion(model.getDetail().getVersion());
- }
+
+ selected = model.getSelectedItem();
+
}
- if (remote == null || uuid == null || version == null) {
- // on restete l'accessibilite de l'action
+ if (selected == null) {
+ // on restete l'accessibilite de l'action
return false;
}
- LoggableElement source = StorageServiceHelper.getElement(getContext(), remote, uuid, version.toString());
+ boolean remote = selected.isRemote();
+ String uuid = selected.getUuid();
+ // preparation du model de l'onglet
+ SynchronizeTabModel model = (SynchronizeTabModel) SimExplorerTab.synchronize.getModel();
+
+ // l'élément selectionné est bien la source
+ model.setSelectedItem(selected);
+
+ DataEntityModel save = model.getSelectedItem();
+ LoggableElement source = save.getLe(getContext());
+
+ model.setSelectedItem(null);
LoggableElement destination;
// recuperation des versions de l'element destination
Version[] versions = StorageServiceHelper.getVersions(getContext(), !remote, uuid);
- if (versions.length == 0) {
- destination = null;
- } else {
+ Version requiredVersion = null;
+ if (versions.length != 0) {
// on prend la dernière version disponible dans la base
- destination = StorageServiceHelper.getElement(getContext(), !remote, uuid, versions[versions.length - 1].toString());
+ requiredVersion = versions[versions.length - 1];
+ //destination = StorageServiceHelper.getElement(getContext(), !remote, uuid, requiredVersion.toString());
}
- // preparation du model de l'onglet
- SynchronizeTabModel model = (SynchronizeTabModel) SimExplorerTab.synchronize.getModel();
- model.setRemote(remote);
+ model.synch(!remote, uuid, requiredVersion);
+
+ destination = model.getSelectedItem().getLe(getContext());
+
+ // sauvegarde de la source
model.setSource(source);
+ // sauvegarde de la destination
model.setDestination(destination);
- model.resetSelectedNodes();
+ model.setSelectedItem(save);
return true;
}
@@ -135,21 +140,10 @@
ui.getContentTreeRemote().addTreeSelectionListener(navigationRemoteListener);
}
- protected void initUI(JSynchronizeTab ui, SynchronizeTabModel model) {
- SynchronizeTabRefreshHelper.refreshTreeLocalActions(ui, null);
- SynchronizeTabRefreshHelper.refreshTreeRemoteActions(ui, null);
- SynchronizeTabRefreshHelper.refreshExportElementToLocalAction(ui, model);
- SynchronizeTabRefreshHelper.refreshExportElementToRemoteAction(ui, model);
-
- SynchronizeTabRefreshHelper.updateSynchronizeNavigationTrees(ui, model);
- }
-
@Override
protected void clear() {
super.clear();
- remote = null;
- uuid = null;
- version = null;
+ selected = null;
}
/**
@@ -167,9 +161,9 @@
SynchronizeTabModel model = getTabModel();
TreePath path = e.getNewLeadSelectionPath();
- LoggableElementTreeNode node = null;
+ EntityTreeNode node = null;
if (path != null) {
- node = (LoggableElementTreeNode) path.getLastPathComponent();
+ node = (EntityTreeNode) path.getLastPathComponent();
}
// on rafraichit toujours ici les actions de l'arbre qui sont
// indépendantes du model et dépendent juste dunoeud sélectionné
@@ -212,9 +206,9 @@
SynchronizeTabModel model = getTabModel();
TreePath path = e.getNewLeadSelectionPath();
- LoggableElementTreeNode node = null;
+ EntityTreeNode node = null;
if (path != null) {
- node = (LoggableElementTreeNode) path.getLastPathComponent();
+ node = (EntityTreeNode) path.getLastPathComponent();
}
// on rafraichit toujours ici les actions de l'arbre qui sont
// indépendantes du model et dépendent juste dunoeud sélectionné
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/UnconnectAction.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/UnconnectAction.java 2008-02-17 15:53:04 UTC (rev 1040)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/UnconnectAction.java 2008-02-17 15:53:30 UTC (rev 1041)
@@ -18,13 +18,19 @@
* ##% */
package fr.cemagref.simexplorer.is.ui.swing.actions;
+import fr.cemagref.simexplorer.is.ui.swing.DetailTabRefreshHelper;
+import fr.cemagref.simexplorer.is.ui.swing.JDetailTab;
+import fr.cemagref.simexplorer.is.ui.swing.JListTab;
+import fr.cemagref.simexplorer.is.ui.swing.ListTabRefreshHelper;
+import fr.cemagref.simexplorer.is.ui.swing.SimExplorerMainUI;
import fr.cemagref.simexplorer.is.ui.swing.SimExplorerTab;
-import fr.cemagref.simexplorer.is.ui.swing.MainUIRefreshHelper;
import fr.cemagref.simexplorer.is.ui.swing.actions.util.SimExplorerAbstractAction;
import fr.cemagref.simexplorer.is.ui.swing.model.DetailTabModel;
import fr.cemagref.simexplorer.is.ui.swing.model.HistoryModel;
-import fr.cemagref.simexplorer.is.ui.swing.model.LoggableElementTreeNode;
+import fr.cemagref.simexplorer.is.ui.swing.model.ListTabModel;
+import fr.cemagref.simexplorer.is.ui.swing.model.EntityTreeNode;
+import javax.swing.JTabbedPane;
import java.awt.event.ActionEvent;
import java.util.Iterator;
import java.util.List;
@@ -46,7 +52,7 @@
)
public class UnconnectAction extends SimExplorerAbstractAction {
- HistoryModel<LoggableElementTreeNode> history;
+ HistoryModel<EntityTreeNode> history;
private static final long serialVersionUID = 2248642521834932196L;
@@ -72,10 +78,10 @@
// nothing to do
return;
}
- LoggableElementTreeNode current = history.getCurrent();
+ EntityTreeNode current = history.getCurrent();
- List<LoggableElementTreeNode> datas = history.getData();
- for (Iterator<LoggableElementTreeNode> it = datas.iterator(); it.hasNext();)
+ List<EntityTreeNode> datas = history.getData();
+ for (Iterator<EntityTreeNode> it = datas.iterator(); it.hasNext();)
{
if (it.next().isRemote()) {
it.remove();
@@ -100,10 +106,68 @@
@Override
protected void afterAction(ActionEvent e) throws Exception {
- MainUIRefreshHelper.refreshConnnectState(getMainUI(), false, history);
+ updateUI();
}
+ /**
+ * Rafraichit les uis après un changement de status de connexion de l'utilisateur.
+ * <p/>
+ * Si l'utilisateur est déconnecté, alors toutes les ui et actions liées au
+ * mode remote sont fermées et les actions correspondantes sont rendues
+ * inaccessibles.
+ */
@Override
+ public void updateUI() {
+ SimExplorerMainUI ui = getMainUI();
+
+ //SwingUtilities.invokeLater(new Runnable() {
+ // public void run() {
+ ui.getConnect().setEnabled(true);
+ ui.getUnconnect().setEnabled(false);
+ ui.getShowTab_remote().setEnabled(false);
+ ui.getToggleTab_remote().setEnabled(false);
+
+ JTabbedPane container = ui.getContent();
+ DetailTabModel model = (DetailTabModel) SimExplorerTab.detail.getModel();
+ JDetailTab tabUI = (JDetailTab) SimExplorerTab.detail.getUI();
+
+ // close all connected ui
+
+ if (SimExplorerTab.remote.isTabVisible(container)) {
+ // close tab
+ SimExplorerTab.remote.closeTab(container);
+ }
+ if (SimExplorerTab.synchronize.isTabVisible(container)) {
+ // close tab
+ SimExplorerTab.synchronize.closeTab(container);
+ }
+ if (SimExplorerTab.detail.isTabVisible(container) && history != null) {
+ if (history.isEmpty()) {
+ // close tab, no more history
+ SimExplorerTab.detail.closeTab(container);
+ } else {
+ // select current history element
+ EntityTreeNode node = history.getCurrent();
+ model.synch(node);
+ //model.setRemote(node.isRemote());
+ //model.setRootNode((LoggableElement) node.getUserObject());
+ DetailTabRefreshHelper.updateDetailNavigationTree(tabUI, model.getHistory());
+ }
+ }
+
+ if (SimExplorerTab.detail.isTabVisible(container)) {
+ DetailTabRefreshHelper.refreshSynchroniseAction(tabUI, model);
+ DetailTabRefreshHelper.refreshExportAction(tabUI, model);
+ }
+
+ if (SimExplorerTab.local.isTabVisible(container)) {
+ ListTabRefreshHelper.refreshListTablePopupMenu((JListTab) SimExplorerTab.local.getUI(), (ListTabModel) SimExplorerTab.local.getModel());
+ }
+ // }
+ //});
+ }
+
+ @Override
protected void clear() {
super.clear();
history = null;
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/ShowListTabAbstractAction.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/ShowListTabAbstractAction.java 2008-02-17 15:53:04 UTC (rev 1040)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/ShowListTabAbstractAction.java 2008-02-17 15:53:30 UTC (rev 1041)
@@ -19,13 +19,13 @@
package fr.cemagref.simexplorer.is.ui.swing.actions.util;
import fr.cemagref.simexplorer.is.entities.metadata.MetaData;
-import fr.cemagref.simexplorer.is.entities.metadata.Version;
import fr.cemagref.simexplorer.is.exceptions.SimExplorerRuntimeException;
import fr.cemagref.simexplorer.is.ui.swing.JListTab;
import fr.cemagref.simexplorer.is.ui.swing.ListTabRefreshHelper;
import fr.cemagref.simexplorer.is.ui.swing.SimExplorerActionManager;
import fr.cemagref.simexplorer.is.ui.swing.actions.ShowDetailTabAction;
import fr.cemagref.simexplorer.is.ui.swing.actions.ShowSynchronizeTabAction;
+import fr.cemagref.simexplorer.is.ui.swing.model.DataEntityModel;
import fr.cemagref.simexplorer.is.ui.swing.model.ListTabModel;
import fr.cemagref.simexplorer.is.ui.swing.model.ListTableModel;
import jaxx.runtime.swing.JAXXTab;
@@ -33,8 +33,10 @@
import javax.swing.AbstractButton;
import javax.swing.JTabbedPane;
+import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
+import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
@@ -51,6 +53,11 @@
/** l'action d'affichage de l'onglet de détail */
ShowDetailTabAction detailAction;
+ /** l'action d'affichage de l'onglet synchronisation */
+ ShowSynchronizeTabAction synchronizeAction;
+
+ ListMetaSelectionListener listMetaSelectionListener;
+
public ShowListTabAbstractAction(String name, boolean remote) {
super(name);
this.remote = remote;
@@ -81,6 +88,8 @@
protected void initFirstUsage(final JListTab ui, final ListTabModel model) {
detailAction = (ShowDetailTabAction) SimExplorerActionManager.newAction("showTab_detail", (AbstractButton) null);
+ synchronizeAction = (ShowSynchronizeTabAction) SimExplorerActionManager.newAction("showTab_synchronize", (AbstractButton) null);
+
ui.getShowTab_synchronize().setHideActionText(false);
ui.getExportElement().setHideActionText(false);
ui.getDownloadElement().setHideActionText(false);
@@ -89,18 +98,11 @@
ui.getImportElement().setEnabled(true);
ui.getImportElement().getAction().setEnabled(true);
ui.getImportElement().setToolTipText(model.isRemote() ? _("simexplorer.action.import.remote.tooltip") : _("simexplorer.action.import.local.tooltip"));
- ui.getTable().getSelectionModel().addListSelectionListener(new ListSelectionListener() {
- public void valueChanged(ListSelectionEvent e) {
- int index = ui.getTable().getSelectedRow();
- model.setSelectedIndex(index);
- ListTabRefreshHelper.refreshListTablePopupMenu(ui, model);
- }
- });
- // add a show detail action when double click on a row of the table
- ui.getTable().addMouseListener(new MouseAdapter() {
+ listMetaSelectionListener = new ListMetaSelectionListener(ui, model);
+ ui.getTable().getSelectionModel().addListSelectionListener(listMetaSelectionListener);
- ShowSynchronizeTabAction synchronizeAction = (ShowSynchronizeTabAction) SimExplorerActionManager.newAction("showTab_synchronize", (AbstractButton) null);
+ ui.getTable().addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
@@ -118,10 +120,8 @@
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
try {
- // récupération du metadata sélectionné
- MetaData data = model.get(ui.getTable().getSelectedRow());
- prepareDetailModel(data);
-
+ // synchronization du meta selectionne
+ synchSelected(ui, getRowAtPoint(ui, e.getPoint()), ui.getTable().getSelectionModel(), model);
// lancement de l'action d'affichage du tab
detailAction.actionPerformed(new ActionEvent(e.getSource(), ActionEvent.ACTION_FIRST, "showTab_detail"));
} catch (Exception e1) {
@@ -131,19 +131,10 @@
}
protected void initPopup(MouseEvent e) {
- int row = ui.getTable().rowAtPoint(e.getPoint());
- if (e.isPopupTrigger() && ui.getTablePopupMenu().isEnabled() && row == model.getSelectedIndex()) {
- // récupération du metadata sélectionné
- MetaData data = model.get(ui.getTable().getSelectedRow());
- if (data == null) {
- // selected the row
-
- return;
- }
- prepareDetailModel(data);
- synchronizeAction.setRemote(isRemote());
- synchronizeAction.setUuid(data.getUuid());
- synchronizeAction.setVersion(data.getVersion());
+ if (e.isPopupTrigger()) {
+ // synchronization du meta selectionne
+ synchSelected(ui, getRowAtPoint(ui, e.getPoint()), ui.getTable().getSelectionModel(), model);
+ // affichage de la popup
ui.getTablePopupMenu().show(ui.getTable(), e.getX(), e.getY());
}
}
@@ -153,27 +144,66 @@
ui.getSearchText().addKeyListener(new KeyAdapter() {
@Override
public void keyReleased(KeyEvent e) {
+ // rafraichissement des actions de recherche
ListTabRefreshHelper.refreshSearchActions(ui, model);
}
});
+
//TODO Est-ce vraiment le bon endroit pour faire ça ?
// push model into tableModel
ListTableModel modelTab = (ListTableModel) ui.getTable().getModel();
modelTab.setData(model.getList());
+ // on force les valeurs nulles
+ model.setSelectedIndex(-1);
+ model.setSelectedItem(null);
}
- protected void prepareDetailModel(MetaData data) {
- // récupération de l'uuid à afficher
- String uuid = data.getUuid();
- // récupération de la version à afficher
- Version version = data.getVersion();
- detailAction.setRemote(isRemote());
- detailAction.setUuid(data.getUuid());
- detailAction.setVersion(data.getVersion());
- log.info("prepare detail - uuid:" + uuid + ", version:" + version + " (remote ?" + remote + ")");
+ protected void synchSelected(final JListTab ui, int rowAtPoint, ListSelectionModel selectionModel, ListTabModel model) {
+ DataEntityModel entityModel;
+ if (rowAtPoint == -1 || model.getSelectedIndex() != rowAtPoint || selectionModel.isSelectionEmpty() || selectionModel.getMinSelectionIndex() != rowAtPoint) {
+ if (rowAtPoint == -1) {
+ rowAtPoint = 0;
+ }
+ if (ui.getTable().getSelectedRow() != rowAtPoint) {
+ // select the row
+ boolean wasEnabled =listMetaSelectionListener.enabled;
+ listMetaSelectionListener.enabled=false;
+ selectionModel.setSelectionInterval(rowAtPoint, rowAtPoint);
+ listMetaSelectionListener.enabled=wasEnabled;
+ }
+ // the model is not yet ready
+ model.setSelectedIndex(rowAtPoint);
+
+ model.synch(model.isRemote(), model.get(rowAtPoint));
+
+ entityModel = model.getSelectedItem();
+ log.info("synch: " + entityModel);
+ ListTabRefreshHelper.refreshListTablePopupMenu(ui, model);
+ }
+ entityModel = model.getSelectedItem();
+ detailAction.setSelected(entityModel);
+ synchronizeAction.setSelected(entityModel);
}
- protected void initUI(JListTab ui, ListTabModel model) {
- ListTabRefreshHelper.refreshListTabUI(ui, model);
+ protected int getRowAtPoint(JListTab ui, Point e) {
+ return ui.getTable().rowAtPoint(e);
}
+
+ private class ListMetaSelectionListener implements ListSelectionListener {
+ boolean enabled;
+ private final JListTab ui;
+ private final ListTabModel model;
+
+ public ListMetaSelectionListener(JListTab ui, ListTabModel model) {
+ this.ui = ui;
+ this.model = model;
+ enabled = true;
+ }
+
+ public void valueChanged(ListSelectionEvent e) {
+ if (enabled) {
+ synchSelected(ui, ui.getTable().getSelectedRow(), ui.getTable().getSelectionModel(), model);
+ }
+ }
+ }
}
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/ShowTabAbstractAction.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/ShowTabAbstractAction.java 2008-02-17 15:53:04 UTC (rev 1040)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/ShowTabAbstractAction.java 2008-02-17 15:53:30 UTC (rev 1041)
@@ -18,8 +18,8 @@
* ##% */
package fr.cemagref.simexplorer.is.ui.swing.actions.util;
-import jaxx.runtime.JAXXObject;
-import jaxx.runtime.builder.TabModel;
+import fr.cemagref.simexplorer.is.ui.swing.model.SimExplorerTabModel;
+import jaxx.runtime.swing.JAXXTab;
import java.awt.event.ActionEvent;
@@ -28,19 +28,16 @@
*
* @author chemit
*/
-public abstract class ShowTabAbstractAction<U extends JAXXObject, M extends TabModel> extends SimExplorerAbstractTabAction {
+public abstract class ShowTabAbstractAction<U extends JAXXTab, M extends SimExplorerTabModel> extends SimExplorerAbstractTabAction {
/**
- * Methode utilisée lors du premier
- * @param ui l'ui de l'onglet
+ * Methode utilisée lors du premier
+ *
+ * @param ui l'ui de l'onglet
* @param model le model de l'onglet
*/
protected abstract void initFirstUsage(U ui, M model);
- protected abstract void initUI(U ui, M model);
-
- /**
- * flag pour indiquer s'il s'agit de la premier init de l'onglet.
- */
+ /** flag pour indiquer s'il s'agit de la premier init de l'onglet. */
protected Boolean firstTime;
@@ -50,7 +47,6 @@
super(name, "showTab");
}
-
@Override
protected boolean beforeAction(ActionEvent e) throws Exception {
@@ -66,15 +62,18 @@
}
@Override
- protected void afterAction(ActionEvent e) throws Exception {
- super.afterAction(e);
+ public void updateUI() {
U ui = getTabUI();
M model = getTabModel();
- if (firstTime) {
+ if (isFirstTime()) {
initFirstUsage(ui, model);
}
- initUI(ui, model);
+ updateUI(ui, model);
+ }
+ protected void updateUI(U ui, M model) {
+ // refresh ui
+ getTab().updateUI(ui, model);
}
@Override
@@ -93,4 +92,7 @@
return (M) getModel();
}
+ public boolean isFirstTime() {
+ return firstTime != null && firstTime;
+ }
}
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/SimExplorerAbstractAction.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/SimExplorerAbstractAction.java 2008-02-17 15:53:04 UTC (rev 1040)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/SimExplorerAbstractAction.java 2008-02-17 15:53:30 UTC (rev 1041)
@@ -99,9 +99,13 @@
}
protected void afterAction(ActionEvent e) throws Exception {
+ updateUI();
+ }
+
+ public void updateUI() {
// nothing by default
}
-
+
protected void clear() {
// nothing by default
}
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/SimExplorerAbstractTabAction.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/SimExplorerAbstractTabAction.java 2008-02-17 15:53:04 UTC (rev 1040)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/SimExplorerAbstractTabAction.java 2008-02-17 15:53:30 UTC (rev 1041)
@@ -19,9 +19,9 @@
package fr.cemagref.simexplorer.is.ui.swing.actions.util;
import fr.cemagref.simexplorer.is.ui.swing.SimExplorerTab;
-import jaxx.runtime.swing.JAXXTab;
import jaxx.runtime.JAXXObject;
import jaxx.runtime.builder.TabModel;
+import jaxx.runtime.swing.JAXXTab;
import org.apache.commons.beanutils.Converter;
import org.codelutin.i18n.I18n;
import org.codelutin.util.ConverterUtil;
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/DetailTabModel.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/DetailTabModel.java 2008-02-17 15:53:04 UTC (rev 1040)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/DetailTabModel.java 2008-02-17 15:53:30 UTC (rev 1041)
@@ -78,7 +78,7 @@
*/
protected MetaData detail;
- protected HistoryModel<LoggableElementTreeNode> history;
+ protected HistoryModel<EntityTreeNode> history;
public LoggableElement getRootNode() {
return rootNode;
@@ -112,9 +112,9 @@
return detail;
}
- public HistoryModel<LoggableElementTreeNode> getHistory() {
+ public HistoryModel<EntityTreeNode> getHistory() {
if (history == null) {
- history = new HistoryModel<LoggableElementTreeNode>(HISTORY_CAPACITY);
+ history = new HistoryModel<EntityTreeNode>(HISTORY_CAPACITY);
}
return history;
}
@@ -168,6 +168,7 @@
public void setDetail(MetaData detail) {
this.detail = detail;
+ synch(isRemote(),detail);
}
public void reset() {
@@ -187,5 +188,4 @@
selectedVersionIndex = null;
selectedAttachmentIndex = null;
}
-
}
\ No newline at end of file
Copied: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/EntityTreeNode.java (from rev 1038, trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/LoggableElementTreeNode.java)
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/EntityTreeNode.java (rev 0)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/EntityTreeNode.java 2008-02-17 15:53:30 UTC (rev 1041)
@@ -0,0 +1,123 @@
+/*
+* ##% Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Code Lutin,
+* Tony Chemit, Gabriel Landais
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+* ##% */
+package fr.cemagref.simexplorer.is.ui.swing.model;
+
+import fr.cemagref.simexplorer.is.entities.data.Library;
+import fr.cemagref.simexplorer.is.entities.data.LoggableElement;
+import fr.cemagref.simexplorer.is.entities.data.Result;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import javax.swing.JTree;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.TreePath;
+
+/**
+ * Le TreeNode de base pour afficher des Entities dans un arbre.
+ * <p/>
+ * <b>Attention, l'objet interne au node n'est pas forcement un LoggableElement,
+ * par exemple pour le noeud 'Components' qui sera un simple String.</b>
+ *
+ * @author chemit
+ */
+public class EntityTreeNode extends DefaultMutableTreeNode {
+
+ static protected Log log = LogFactory.getLog(EntityTreeNode.class);
+
+ private static final long serialVersionUID = -7544097600554338499L;
+
+ protected String text;
+
+ protected boolean remote;
+
+ public EntityTreeNode(EntityTreeNode parent, Object userObject, boolean remote, boolean allowedChildren) {
+ this(parent, userObject.toString(), userObject, remote, allowedChildren);
+ }
+
+ public EntityTreeNode(EntityTreeNode parent, String i18n, Object userObject, boolean remote, boolean allowedChildren) {
+ super(userObject, allowedChildren);
+ if (parent != null) {
+ parent.add(this);
+ }
+ text = i18n;
+ this.remote = remote;
+ log.debug("Parent " + parent + ", userObject : " + userObject + ", type : " + userObject.getClass().getSimpleName());
+ }
+
+ public Object get() {
+ LoggableElement le = getLoggableElement();
+ if (le!=null) {
+ return le;
+ }
+ if (isResult()) {
+ return getUserObject();
+ }
+ return null;
+ }
+
+ public LoggableElement getLoggableElement() {
+ Object userObject = getUserObject();
+ if (userObject instanceof LoggableElement) {
+ return (LoggableElement) userObject;
+ }
+ return null;
+ }
+
+ public boolean isResult() {
+ return getLoggableElement() == null && getUserObject() instanceof Result;
+ }
+
+ @Override
+ public String toString() {
+ return text;
+ }
+
+ public boolean isRemote() {
+ return remote;
+ }
+
+ public void collaspeAll(JTree tree) {
+ if (isLeaf()) {
+ return;
+ }
+ for (Object child : children) {
+ ((EntityTreeNode) child).collaspeAll(tree);
+ }
+ tree.collapsePath(new TreePath(getPath()));
+ }
+
+ public void expandAll(JTree tree) {
+ if (isLeaf()) {
+ return;
+ }
+ tree.expandPath(new TreePath(getPath()));
+ for (Object child : children) {
+ ((EntityTreeNode) child).expandAll(tree);
+ }
+ }
+
+ public boolean isLoggableElement() {
+ return userObject != null && userObject instanceof LoggableElement;
+ }
+
+ public boolean isDownloadableElement() {
+ return userObject != null && (userObject instanceof Result || userObject instanceof Library);
+ }
+
+}
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/ListTabModel.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/ListTabModel.java 2008-02-17 15:53:04 UTC (rev 1040)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/ListTabModel.java 2008-02-17 15:53:30 UTC (rev 1041)
@@ -110,7 +110,7 @@
public void initTabModel(SimExplorerContext context, boolean remote) throws Exception {
// first local query, build model
- setRemote(remote);
+ synch(remote,null,null);
updateTabModel(context, remote);
}
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/SimExplorerTabModel.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/SimExplorerTabModel.java 2008-02-17 15:53:04 UTC (rev 1040)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/SimExplorerTabModel.java 2008-02-17 15:53:30 UTC (rev 1041)
@@ -17,6 +17,10 @@
* ##% */
package fr.cemagref.simexplorer.is.ui.swing.model;
+import fr.cemagref.simexplorer.is.entities.EntityHelper;
+import fr.cemagref.simexplorer.is.entities.data.LoggableElement;
+import fr.cemagref.simexplorer.is.entities.metadata.MetaData;
+import fr.cemagref.simexplorer.is.entities.metadata.Version;
import fr.cemagref.simexplorer.is.ui.swing.SimExplorerTab;
import jaxx.runtime.builder.TabModel;
@@ -35,6 +39,9 @@
/** l'onglet associé au model */
protected SimExplorerTab tab;
+ /** le dernier élément sélectionné dans l'onglet */
+ protected DataEntityModel selectedItem;
+
/** flag pour savoir si la source est remote ou non */
protected Boolean remote;
@@ -51,16 +58,68 @@
return remote;
}
+ public void synch(EntityTreeNode node) {
+ if (node == null) {
+ synch(remote, null, null);
+ return;
+ }
+ LoggableElement selectedElement;
+ if (node.isResult()) {
+ EntityTreeNode parent = (EntityTreeNode) node.getParent();
+ selectedElement = parent.getLoggableElement();
+ synch(node.isRemote(), selectedElement);
+ getSelectedItem().setType(EntityHelper.Type.Result);
+ } else {
+ selectedElement = node.getLoggableElement();
+ synch(node.isRemote(), selectedElement);
+ }
+ }
+
+ public void synch(boolean remote, LoggableElement selectedElement) {
+ if (selectedElement == null) {
+ synch(remote, null, null);
+ return;
+ }
+ synch(remote, selectedElement.getMetaData());
+ getSelectedItem().setLe(selectedElement);
+ }
+
+ public void synch(boolean remote, MetaData selectedMeta) {
+ if (selectedMeta == null) {
+ synch(remote, null, null);
+ return;
+ }
+ synch(remote, selectedMeta.getUuid(), selectedMeta.getVersion());
+ getSelectedItem().setMeta(selectedMeta);
+ }
+
+ public void synch(boolean remote, String uuid, Version version) {
+ this.remote = remote;
+ getSelectedItem().synch(remote, uuid, version);
+ }
+
+ public DataEntityModel getSelectedItem() {
+ if (selectedItem == null) {
+ selectedItem = new DataEntityModel();
+ //selectedItem.setRemote(remote);
+ }
+ return selectedItem;
+ }
+
public void setName(String name) {
this.tab = SimExplorerTab.valueOf(name);
}
- public void setRemote(boolean remote) {
- this.remote = remote;
+ public void setSelectedItem(DataEntityModel selectedItem) {
+ this.selectedItem = selectedItem;
+ if (selectedItem != null) {
+ remote = selectedItem.isRemote();
+ }
}
public void reset() {
remote = null;
+ selectedItem = null;
}
public synchronized void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/SynchronizeTabModel.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/SynchronizeTabModel.java 2008-02-17 15:53:04 UTC (rev 1040)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/SynchronizeTabModel.java 2008-02-17 15:53:30 UTC (rev 1041)
@@ -62,7 +62,7 @@
}
public void setSource(LoggableElement source) {
- this.source = source;
+ this.source = source;
}
public void setDestination(LoggableElement destination) {
@@ -81,13 +81,10 @@
firePropertyChange(SELECTED_REMOTE_NODE_PROPERTY_CHANGED, oldSelectedNode, remoteSelectedNode);
}
- public void resetSelectedNodes() {
- localSelectedNode = remoteSelectedNode = null;
- }
-
public void reset() {
super.reset();
- resetSelectedNodes();
+ localSelectedNode = remoteSelectedNode = null;
source = destination = null;
}
+
}
\ No newline at end of file
Deleted: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/TreeNodeBuilder.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/TreeNodeBuilder.java 2008-02-17 15:53:04 UTC (rev 1040)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/TreeNodeBuilder.java 2008-02-17 15:53:30 UTC (rev 1041)
@@ -1,280 +0,0 @@
-/*
-* ##% Copyright (C) 2007, 2008 Code Lutin,
-* Tony Chemit, Gabriel Landais
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 2
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-* ##% */
-package fr.cemagref.simexplorer.is.ui.swing.model;
-
-import static fr.cemagref.simexplorer.is.entities.EntityHelper.Type.Code;
-import static fr.cemagref.simexplorer.is.entities.EntityHelper.Type.Component;
-import static fr.cemagref.simexplorer.is.entities.EntityHelper.Type.Constant;
-import static fr.cemagref.simexplorer.is.entities.EntityHelper.Type.ConstantValue;
-import static fr.cemagref.simexplorer.is.entities.EntityHelper.Type.ExplorationData;
-import static fr.cemagref.simexplorer.is.entities.EntityHelper.Type.Library;
-import static fr.cemagref.simexplorer.is.entities.EntityHelper.Type.Structure;
-import fr.cemagref.simexplorer.is.entities.EntityVisitable;
-import fr.cemagref.simexplorer.is.entities.SimpleEntityVisitor;
-import fr.cemagref.simexplorer.is.entities.metadata.MetaData;
-import fr.cemagref.simexplorer.is.entities.data.Code;
-import fr.cemagref.simexplorer.is.entities.data.Component;
-import fr.cemagref.simexplorer.is.entities.data.Constant;
-import fr.cemagref.simexplorer.is.entities.data.ConstantValue;
-import fr.cemagref.simexplorer.is.entities.data.ExplorationApplication;
-import fr.cemagref.simexplorer.is.entities.data.ExplorationData;
-import fr.cemagref.simexplorer.is.entities.data.Library;
-import fr.cemagref.simexplorer.is.entities.data.LoggableElement;
-import fr.cemagref.simexplorer.is.entities.data.Result;
-import fr.cemagref.simexplorer.is.entities.data.Structure;
-
-import java.util.Collection;
-
-/**
- * La classe responsable de la création des arbres de {@link LoggableElementTreeNode}
- * à partir de {@link LoggableElement} .
- * <p/>
- * La classe possède une instance cachée par thread qui délègue la construction
- * del'arbre de navigation à un visiteur de {@link LoggableElement}.
- * <p/>
- *
- * @author chemit
- */
-public class TreeNodeBuilder extends SimpleEntityVisitor {
-
- /** L'instance cachée par Thread. */
- protected static final ThreadLocal<TreeNodeBuilder> instance =
- new ThreadLocal<TreeNodeBuilder>() {
- @Override
- protected TreeNodeBuilder initialValue() {
- return new TreeNodeBuilder();
- }
- };
-
- /** le visiteur */
- protected LoggableElementVisitorBuilder visitor;
-
- /**
- * Construit un arbre de navigation à partir d'un {@link LoggableElement}.
- *
- * @param v la donnée à visiter
- * @param remote flag pour indiquer si on travaille sur des données locales
- * ou en remote.
- * @return le noeud parent de l'arbre de nivation construit.
- */
- public static LoggableElementTreeNode build(LoggableElement v, boolean remote) {
- TreeNodeBuilder instance;
- synchronized (instance = TreeNodeBuilder.instance.get()) {
- LoggableElementTreeNode result;
- // walk
- result = instance.visitor.visit(v, remote);
- return result;
- }
- }
-
- /** Protected scope to disable instanciation, use cached instance instead. */
- protected TreeNodeBuilder() {
- visitor = new LoggableElementVisitorBuilder();
- }
-
- /**
- * Lazy visitor getter.
- *
- * @return the cached visitor instance
- */
- public LoggableElementVisitorBuilder getVisitor() {
- if (visitor == null) {
- visitor = new LoggableElementVisitorBuilder();
- }
- return visitor;
- }
-
-
- /**
- * Implantation de {@link SimpleEntityVisitor} pour construire l'arbre
- * de navigation d'un {@link LoggableElement}.
- * <p/>
- * Cette classe est stateless, tous ces états internes doivent être nettoyé
- * après une visite, en utilisant la méthode {@link #reset()}.
- * <p/>
- */
- public static class LoggableElementVisitorBuilder extends SimpleEntityVisitor {
-
- /**
- * le noeud parent de tous les autres.
- * <p/>
- * Ce noeud est positionné par la méthode
- * {@link #markRootNode(LoggableElementTreeNode)}.
- */
- protected LoggableElementTreeNode rootNode;
-
- /**
- * flag qui indique si on travaille sur des objet locaux ou distants.
- * <p/>
- * Cette information est conservé dans les nodes pour permettre de gérer
- * de manière transparent des objet locaux ou distants.
- */
- protected Boolean remote;
-
- /** les nodes internes utilisés pendant la visite. */
- protected LoggableElementTreeNode explorationApplication,
- component,
- explorationData,
- components,
- explorationDatas,
- libraries,
- constants,
- strutures,
- codes,
- constantValues;
-
- public LoggableElementTreeNode visit(EntityVisitable v, boolean remote) {
- reset();
- try {
- this.remote = remote;
- super.visit(v);
- return this.rootNode;
- } finally {
- reset();
- }
- }
-
- @Override
- public void visitMetaData(MetaData v) {
- // do not visit meta data (for the moment we dont need thoses
- // informations in navigation tree), but it could be interresting
- // for example to display attchments here ?
- }
-
- @Override
- public void visitExplorationApplication(ExplorationApplication v) {
- markRootNode(explorationApplication = new LoggableElementTreeNode(explorationDatas, v, remote, true));
- super.visitExplorationApplication(v);
- }
-
- @Override
- public void visitComponent(Component v) {
- markRootNode(component = new LoggableElementTreeNode(components, v, remote, true));
- super.visitComponent(v);
- }
-
- @Override
- public void visitExplorationData(ExplorationData v) {
- markRootNode(explorationData = new LoggableElementTreeNode(explorationDatas, v, remote, true));
- super.visitExplorationData(v);
- }
-
- @Override
- public void visitCodes(Collection<Code> vs) {
- codes = new LoggableElementTreeNode(component, Code.getLibelles(), remote, true);
- super.visitCodes(vs);
- }
-
- @Override
- public void visitComponents(Collection<Component> vs) {
- components = new LoggableElementTreeNode(explorationApplication, Component.getLibelles(), remote, true);
- super.visitComponents(vs);
- }
-
- @Override
- public void visitConstants(Collection<Constant> vs) {
- constants = new LoggableElementTreeNode(component, Constant.getLibelles(), remote, true);
- super.visitConstants(vs);
- }
-
- @Override
- public void visitConstantValues(Collection<ConstantValue> vs) {
- constantValues = new LoggableElementTreeNode(explorationData, ConstantValue.getLibelles(), remote, true);
- super.visitConstantValues(vs);
- }
-
- @Override
- public void visitExplorationDatas(Collection<ExplorationData> vs) {
- explorationDatas = new LoggableElementTreeNode(explorationApplication, ExplorationData.getLibelles(), remote, true);
- super.visitExplorationDatas(vs);
- }
-
- @Override
- public void visitLibraries(Collection<Library> vs) {
- libraries = new LoggableElementTreeNode(component, Library.getLibelles(), remote, true);
- super.visitLibraries(vs);
- }
-
- @Override
- public void visitStructures(Collection<Structure> vs) {
- strutures = new LoggableElementTreeNode(component, Structure.getLibelles(), remote, true);
- super.visitStructures(vs);
- }
-
- @Override
- public void visitConstant(Constant v) {
- markRootNode(new LoggableElementTreeNode(constants, v, remote, false));
- }
-
- @Override
- public void visitLibrary(Library v) {
- markRootNode(new LoggableElementTreeNode(libraries, v, remote, false));
- }
-
- @Override
- public void visitResult(Result v) {
- if (v != null) {
- markRootNode(new LoggableElementTreeNode(explorationData, v, remote, false));
- }
- }
-
- @Override
- public void visitCode(Code v) {
- new LoggableElementTreeNode(codes, v, remote, false);
- }
-
- @Override
- public void visitConstantValue(ConstantValue v) {
- new LoggableElementTreeNode(
- new LoggableElementTreeNode(constantValues, v.getConstant().getName(), remote, true),
- v.getValue(), remote, false);
- }
-
- @Override
- public void visitStructure(Structure v) {
- new LoggableElementTreeNode(strutures, v, remote, false);
- }
-
- /**
- * Tente de marquerle node donné comme noeud ancêtre de tous les autres.
- * <p/>
- * Le positionnement n'a lieu que si on a pas encore de rootNode.
- *
- * @param node le node a positionner comme rootNode (si nessecaire)
- */
- protected void markRootNode(LoggableElementTreeNode node) {
- if (rootNode == null) {
- rootNode = node;
- }
- }
-
- /**
- * La méthode pour réinitialiser les états interne de la classe.
- * <p/>
- * Cette méthode doit être appeler après chaque visite, afin d'assurer
- * la propriété stateless de la classe.
- */
- protected void reset() {
- remote = null;
- rootNode = explorationApplication = explorationDatas = explorationData
- = components = component = constants = codes = libraries
- = constantValues = null;
- }
- }
-}
1
0
r1040 - trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model
by tchemit@users.labs.libre-entreprise.org 17 Feb '08
by tchemit@users.labs.libre-entreprise.org 17 Feb '08
17 Feb '08
Author: tchemit
Date: 2008-02-17 15:53:04 +0000 (Sun, 17 Feb 2008)
New Revision: 1040
Added:
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/DataEntityModel.java
Log:
introduction d'un modele de selection d'entity
Added: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/DataEntityModel.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/DataEntityModel.java (rev 0)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/DataEntityModel.java 2008-02-17 15:53:04 UTC (rev 1040)
@@ -0,0 +1,251 @@
+/*
+* ##% Copyright (C) 2007, 2008 Code Lutin, Tony Chemit, Gabriel Landais
+*
+* This program is free software; you can redistribute it and/or
+* modify it under the terms of the GNU General Public License
+* as published by the Free Software Foundation; either version 2
+* of the License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+* ##% */
+package fr.cemagref.simexplorer.is.ui.swing.model;
+
+import fr.cemagref.simexplorer.is.entities.EntityHelper;
+import fr.cemagref.simexplorer.is.entities.data.DataEntity;
+import fr.cemagref.simexplorer.is.entities.data.ExplorationData;
+import fr.cemagref.simexplorer.is.entities.data.LoggableElement;
+import fr.cemagref.simexplorer.is.entities.metadata.Version;
+import fr.cemagref.simexplorer.is.entities.metadata.MetaData;
+import fr.cemagref.simexplorer.is.ui.SimExplorerContext;
+import fr.cemagref.simexplorer.is.ui.StorageServiceHelper;
+
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+
+/**
+ * Le model d'un meta sélectionné dans un onglet
+ *
+ * @author chemit
+ * @see DataEntity
+ */
+public class DataEntityModel implements java.io.Serializable {
+
+ /** flag pour savoir si la source est remote ou non */
+ protected Boolean remote;
+
+ /** l'uuid de l'élément sélectionné */
+ protected String uuid;
+
+ /** la version de l'élément sélectionné */
+ protected Version version;
+
+ /** flag pour indiquer si on veut avoir le resultat */
+ protected Boolean result;
+
+ protected EntityHelper.Type type;
+
+ /** l'objet selectionne */
+ protected DataEntity data;
+
+ /** l'objet selectionne */
+ protected MetaData meta;
+
+ /** l'objet selectionne ou son le */
+ protected LoggableElement le;
+
+ /** support pourles changements des propriétés */
+ protected PropertyChangeSupport changeSupport;
+ private static final long serialVersionUID = 7391453280198510606L;
+
+
+ public boolean isRemote() {
+ return remote != null && remote;
+ }
+
+ public boolean isResult() {
+ return result != null && result;
+ }
+
+ public String getUuid() {
+ return uuid;
+ }
+
+ public Version getVersion() {
+ return version;
+ }
+
+ public MetaData getMeta() {
+ return meta;
+ }
+
+ public LoggableElement getLe(SimExplorerContext context) {
+ if (uuid == null || version == null || remote == null) {
+ return null;
+ }
+ if (le != null) {
+ return le;
+ }
+ // acquire it
+ le = StorageServiceHelper.getElement(context, isRemote(), uuid, version.toString());
+
+ if (le == null) {
+ type = null;
+ data = null;
+ }
+ return le;
+ }
+
+ public void setMeta(MetaData meta) {
+ this.meta = meta;
+ }
+
+ public void setLe(LoggableElement le) {
+ this.le = le;
+ }
+
+ public void setData(DataEntity data) {
+ this.data = data;
+ }
+
+ public void setType(EntityHelper.Type type) {
+ this.type = type;
+ }
+
+ /**
+ * Getter of selected real object (LoggableElement or Result).
+ * <p/>
+ * Will call the correct StorageService if data is not present
+ *
+ * @param context the application context
+ * @return the object selected
+ */
+ public DataEntity get(SimExplorerContext context) {
+ if (uuid == null || version == null || remote == null) {
+ return null;
+ }
+ if (data != null) {
+ return data;
+ }
+
+ // acquire loggableElement
+ le = getLe(context);
+
+ if (le == null) {
+ type = null;
+ data = null;
+ result=null;
+ return null;
+ }
+ // compute type of data
+ type = EntityHelper.Type.valueOf(le.getMetaData().getType());
+ setResult(EntityHelper.Type.Result == type);
+
+ // compute real data selected
+ if (type.isLe()) {
+ return data = le;
+ }
+ if (isResult()) {
+ return data = ((ExplorationData) le).getResult();
+ }
+ //TODO Do the other cases
+ throw new IllegalStateException("can not find DataEntity for " + this + " and le:" + le);
+ }
+
+ public void synch(boolean remote, String uuid, Version version) {
+ reset();
+ setRemote(remote);
+ setUuid(uuid);
+ setVersion(version);
+ }
+
+ public void setRemote(boolean remote) {
+ this.remote = remote;
+ }
+
+ public void setResult(Boolean result) {
+ this.result = result;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ public void setVersion(Version version) {
+ this.version = version;
+ }
+
+ public void reset() {
+ remote = null;
+ uuid = null;
+ version = null;
+ result = null;
+ le = null;
+ type = null;
+ data = null;
+ }
+
+ @Override
+ public String toString() {
+ return super.toString() + "<remote:" + remote + ", uuid:" + uuid +
+ ", version:" + version + ", result:" + result + ", type:" +
+ type + ">";
+ }
+
+ public synchronized void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
+ if (listener == null) {
+ return;
+ }
+ if (changeSupport == null) {
+ changeSupport = new PropertyChangeSupport(this);
+ }
+ changeSupport.addPropertyChangeListener(propertyName, listener);
+ }
+
+ public synchronized void addPropertyChangeListener(PropertyChangeListener listener) {
+ if (listener == null) {
+ return;
+ }
+ if (changeSupport == null) {
+ changeSupport = new PropertyChangeSupport(this);
+ }
+ changeSupport.addPropertyChangeListener(listener);
+ }
+
+ public synchronized void removePropertyChangeListener(PropertyChangeListener listener) {
+ if (listener == null || changeSupport == null) {
+ return;
+ }
+ changeSupport.removePropertyChangeListener(listener);
+ }
+
+ public synchronized void removePropertyChangeListeners() {
+ if (changeSupport == null) {
+ return;
+ }
+ for (PropertyChangeListener listener : getPropertyChangeListeners()) {
+ changeSupport.removePropertyChangeListener(listener);
+ }
+ }
+
+ public synchronized PropertyChangeListener[] getPropertyChangeListeners() {
+ if (changeSupport == null) {
+ return new PropertyChangeListener[0];
+ }
+ return changeSupport.getPropertyChangeListeners();
+ }
+
+ public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
+ if (changeSupport == null || (oldValue == null && newValue == null) ||
+ (oldValue != null && oldValue.equals(newValue))) {
+ return;
+ }
+ changeSupport.firePropertyChange(propertyName, oldValue, newValue);
+ }
+}
\ No newline at end of file
1
0
r1039 - in trunk/simexplorer-is/simexplorer-is-swing/src: java/fr/cemagref/simexplorer/is/ui/swing/actions resources resources/i18n
by tchemit@users.labs.libre-entreprise.org 17 Feb '08
by tchemit@users.labs.libre-entreprise.org 17 Feb '08
17 Feb '08
Author: tchemit
Date: 2008-02-17 08:33:10 +0000 (Sun, 17 Feb 2008)
New Revision: 1039
Modified:
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/SiteAction.java
trunk/simexplorer-is/simexplorer-is-swing/src/resources/commandline.properties
trunk/simexplorer-is/simexplorer-is-swing/src/resources/i18n/simexplorer-is-swing-en_GB.properties
trunk/simexplorer-is/simexplorer-is-swing/src/resources/i18n/simexplorer-is-swing-fr_FR.properties
Log:
mise en place action site
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/SiteAction.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/SiteAction.java 2008-02-16 21:00:08 UTC (rev 1038)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/SiteAction.java 2008-02-17 08:33:10 UTC (rev 1039)
@@ -18,10 +18,12 @@
* ##% */
package fr.cemagref.simexplorer.is.ui.swing.actions;
+import fr.cemagref.simexplorer.is.exceptions.SimExplorerRuntimeException;
import fr.cemagref.simexplorer.is.ui.swing.actions.util.SimExplorerAbstractAction;
-import fr.cemagref.simexplorer.is.exceptions.SimExplorerRuntimeException;
+import java.awt.Desktop;
import java.awt.event.ActionEvent;
+import java.net.URL;
/**
* Action pour accéder au site de l'application
@@ -41,13 +43,29 @@
private static final long serialVersionUID = 7458557977976803799L;
+ protected URL siteUrl;
+
public SiteAction(String name) {
super(name);
}
@Override
+ protected boolean beforeAction(ActionEvent e) throws Exception {
+ if (!super.beforeAction(e)) {
+ return false;
+ }
+ siteUrl = getContext().getConfig().getSiteURL();
+ return siteUrl != null;
+ }
+
+ @Override
protected void doAction(ActionEvent e) throws Exception {
super.doAction(e);
- throw new SimExplorerRuntimeException(this+" is not implemented yet!");
+ if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) {
+ Desktop.getDesktop().browse(siteUrl.toURI());
+ } else {
+ //TODO log error ?
+ throw new SimExplorerRuntimeException(this + " browser is not supported");
+ }
}
}
\ No newline at end of file
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/resources/commandline.properties
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/resources/commandline.properties 2008-02-16 21:00:08 UTC (rev 1038)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/resources/commandline.properties 2008-02-17 08:33:10 UTC (rev 1039)
@@ -36,6 +36,9 @@
main.config.definition.version=org.codelutin.util.VersionNumber:0.0.1
main.config.modifiers.version=final,static,mandatory
+main.config.definition.siteURL=java.net.URL:http://simexplorer-si.labs.libre-entreprise.org
+main.config.modifiers.siteURL=final,static,mandatory
+
#main.config.definition.smtpServer=java.lang.String:smtp
#main.config.modifiers.smtpServer=mandatory
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/resources/i18n/simexplorer-is-swing-en_GB.properties
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/resources/i18n/simexplorer-is-swing-en_GB.properties 2008-02-16 21:00:08 UTC (rev 1038)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/resources/i18n/simexplorer-is-swing-en_GB.properties 2008-02-17 08:33:10 UTC (rev 1039)
@@ -142,6 +142,7 @@
simexplorer.config.main.remoteURI.description=URI of the remote storage service
simexplorer.config.main.showLocalTab.description=Show at launch time, the local tab
simexplorer.config.main.showRemoteTab.description=Show at launch time, the remote tab
+simexplorer.config.main.siteURL.description=Simexplorer-is site URL
simexplorer.config.main.sizor.description=number of result to display by page in ui
simexplorer.config.main.userCountry.description=Country of the user's locale
simexplorer.config.main.userFirstName.description=User first name
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/resources/i18n/simexplorer-is-swing-fr_FR.properties
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/resources/i18n/simexplorer-is-swing-fr_FR.properties 2008-02-16 21:00:08 UTC (rev 1038)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/resources/i18n/simexplorer-is-swing-fr_FR.properties 2008-02-17 08:33:10 UTC (rev 1039)
@@ -142,6 +142,7 @@
simexplorer.config.main.remoteURI.description=l'url du service distant
simexplorer.config.main.showLocalTab.description=Voir au d\u00E9marrage l'onglet Local
simexplorer.config.main.showRemoteTab.description=Voir au d\u00E9mrrage l'onglet Distant
+simexplorer.config.main.siteURL.description=L'URL du site de Simexplorer-is
simexplorer.config.main.sizor.description=Nombre de r\u00E9sultats par page dans l'ui
simexplorer.config.main.userCountry.description=Le pays de la locale utilisateur
simexplorer.config.main.userFirstName.description=Le pr\u00E9nom de l'utilisateur
1
0
r1038 - in trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions: . util
by tchemit@users.labs.libre-entreprise.org 16 Feb '08
by tchemit@users.labs.libre-entreprise.org 16 Feb '08
16 Feb '08
Author: tchemit
Date: 2008-02-16 21:00:08 +0000 (Sat, 16 Feb 2008)
New Revision: 1038
Modified:
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ChangePageAction.java
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ChangeSizorAction.java
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ExportAction.java
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ResetSearchAction.java
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/SearchAction.java
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ShowDetailTabAction.java
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ShowSynchronizeTabAction.java
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/ShowListTabAbstractAction.java
Log:
am?\195?\169lioration actions
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ChangePageAction.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ChangePageAction.java 2008-02-16 20:59:30 UTC (rev 1037)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ChangePageAction.java 2008-02-16 21:00:08 UTC (rev 1038)
@@ -83,7 +83,7 @@
// save new firstIndex in model
pagination.setFirstIndex(newFirstIndex);
- model.updateTabModel(isRemote(), getContext());
+ model.updateTabModel(getContext(), isRemote());
// update table model
JListTab container = (JListTab) getUI();
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ChangeSizorAction.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ChangeSizorAction.java 2008-02-16 20:59:30 UTC (rev 1037)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ChangeSizorAction.java 2008-02-16 21:00:08 UTC (rev 1038)
@@ -79,7 +79,7 @@
pagination.setWidth(newWidth);
pagination.setFirstIndex(0);
- model.updateTabModel(isRemote(), getContext());
+ model.updateTabModel(getContext(), isRemote());
// save in TableModel
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ExportAction.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ExportAction.java 2008-02-16 20:59:30 UTC (rev 1037)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ExportAction.java 2008-02-16 21:00:08 UTC (rev 1038)
@@ -26,7 +26,7 @@
import fr.cemagref.simexplorer.is.ui.swing.actions.util.SimExplorerAbstractTabAction;
import fr.cemagref.simexplorer.is.ui.swing.model.DetailTabModel;
import fr.cemagref.simexplorer.is.ui.swing.model.ListTabModel;
-import fr.cemagref.simexplorer.is.ui.swing.model.SynchronizeTabModel;
+import fr.cemagref.simexplorer.is.ui.swing.model.SimExplorerTabModel;
import jaxx.runtime.builder.TabModel;
import java.awt.event.ActionEvent;
@@ -80,7 +80,7 @@
uuid = element.getUuid();
version = element.getVersion();
remote = model.isRemote();
- } else if (tabModel instanceof SynchronizeTabModel) {
+ } else if (tabModel instanceof SimExplorerTabModel) {
// the real test will be in extends class
return true;
}
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ResetSearchAction.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ResetSearchAction.java 2008-02-16 20:59:30 UTC (rev 1037)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ResetSearchAction.java 2008-02-16 21:00:08 UTC (rev 1038)
@@ -56,7 +56,7 @@
JListTab ui = (JListTab) getUI();
// always clean the input text (should be done in jaxx)
ui.getSearchText().setText(null);
- if (!model.hasQuery()) {
+ if (!model.getQuery().hasQuery()) {
// directly refresh search actions
// but do not realize action
ListTabRefreshHelper.refreshSearchActions(ui,model);
@@ -78,7 +78,7 @@
model.getPagination().setFirstIndex(0);
// get data from service
- model.updateTabModel(isRemote(), getContext());
+ model.updateTabModel(getContext(), isRemote());
// update table model in ui
JListTab container = (JListTab) getUI();
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/SearchAction.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/SearchAction.java 2008-02-16 20:59:30 UTC (rev 1037)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/SearchAction.java 2008-02-16 21:00:08 UTC (rev 1038)
@@ -57,20 +57,20 @@
JTextField uiObject = (JTextField) getUIObject("searchText");
query = uiObject.getText();
ListTabModel model = (ListTabModel) getModel();
- return !query.isEmpty() && !query.equals(model.getQuery());
+ return !query.isEmpty() && !query.equals(model.getQuery().getQuery());
}
@Override
protected void doAction(ActionEvent e) throws Exception {
super.doAction(e);
ListTabModel model = (ListTabModel) getModel();
- model.setQuery(query);
+ model.getQuery().setQuery(query);
// a new search begins always on first page
model.getPagination().setFirstIndex(0);
// get data from service
- model.updateTabModel(isRemote(), getContext());
+ model.updateTabModel(getContext(), isRemote());
// update table model in ui
JListTab container = (JListTab) getUI();
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ShowDetailTabAction.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ShowDetailTabAction.java 2008-02-16 20:59:30 UTC (rev 1037)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ShowDetailTabAction.java 2008-02-16 21:00:08 UTC (rev 1038)
@@ -25,6 +25,7 @@
import fr.cemagref.simexplorer.is.ui.swing.DetailTabRefreshHelper;
import fr.cemagref.simexplorer.is.ui.swing.JDetailTab;
import fr.cemagref.simexplorer.is.ui.swing.MainUIRefreshHelper;
+import fr.cemagref.simexplorer.is.ui.swing.SimExplorerTab;
import fr.cemagref.simexplorer.is.ui.swing.actions.util.ShowTabAbstractAction;
import fr.cemagref.simexplorer.is.ui.swing.model.DetailTabModel;
import fr.cemagref.simexplorer.is.ui.swing.model.LoggableElementTreeNode;
@@ -36,6 +37,7 @@
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.TreePath;
+import java.awt.event.ActionEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.beans.PropertyChangeEvent;
@@ -61,6 +63,13 @@
)
public class ShowDetailTabAction extends ShowTabAbstractAction<JDetailTab, DetailTabModel> {
+ /** flag pour indiquer si la source vient de la base locale ou distante */
+ protected Boolean remote;
+ /** l'uuid de l'éléement dont on veut voir les details */
+ protected String uuid;
+ /** la version de l'élément dont on veut voir les details */
+ protected Version version;
+
private static final long serialVersionUID = 6643631041114311643L;
NavigationSelectionListener navigationListener;
@@ -76,6 +85,37 @@
attachmentListener = new AttachmentSelectionListener();
}
+ @Override
+ protected boolean beforeAction(ActionEvent e) throws Exception {
+ if (!super.beforeAction(e)) {
+ return false;
+ }
+
+ // préparation du modèle de détail
+ DetailTabModel detailModel = (DetailTabModel) SimExplorerTab.detail.getModel();
+ // chargement de l'élément à partir du service
+ LoggableElement element = StorageServiceHelper.getElement(getContext(), remote, uuid, version.toString());
+ // on supprime les anciennes données du modèle
+ detailModel.reset();
+ // positionnement du type de détail (local ou remote)
+ detailModel.setRemote(remote);
+ // positionnement du rootNode du modèle
+ detailModel.setRootNode(element);
+ return element!=null;
+ }
+
+ public void setRemote(Boolean remote) {
+ this.remote = remote;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ public void setVersion(Version version) {
+ this.version = version;
+ }
+
protected void initFirstUsage(final JDetailTab ui, final DetailTabModel model) {
// add a listener on navigation tree
ui.getNavigationTree().addTreeSelectionListener(navigationListener);
@@ -93,6 +133,15 @@
DetailTabRefreshHelper.updateDetailNavigationTree(ui, model.getHistory());
}
+ @Override
+ protected void clear() {
+ super.clear();
+ uuid=null;
+ version=null;
+ remote=null;
+ //setTab(null);
+ }
+
/**
* The listener of the selection in navigation tree.
*
@@ -101,7 +150,7 @@
protected class NavigationSelectionListener implements TreeSelectionListener, PropertyChangeListener {
public NavigationSelectionListener() {
- getTabModel().addPropertyChangeListener(DetailTabModel.Properties.SELECTED_NODE_PROPERTY_CHANGED, this);
+ getTabModel().addPropertyChangeListener(DetailTabModel.SELECTED_NODE_PROPERTY_CHANGED, this);
}
public void valueChanged(TreeSelectionEvent e) {
@@ -195,7 +244,7 @@
public VersionSelectionListener() {
enabled = true;
- getTabModel().addPropertyChangeListener(DetailTabModel.Properties.SELECTED_VERSION_INDEX_PROPERTY_CHANGED, this);
+ getTabModel().addPropertyChangeListener(DetailTabModel.SELECTED_VERSION_INDEX_PROPERTY_CHANGED, this);
}
public void itemStateChanged(ItemEvent e) {
@@ -285,7 +334,7 @@
public AttachmentSelectionListener() {
enabled = true;
- getTabModel().addPropertyChangeListener(DetailTabModel.Properties.SELECTED_ATTACHMENT_INDEX_PROPERTY_CHANGED, this);
+ getTabModel().addPropertyChangeListener(DetailTabModel.SELECTED_ATTACHMENT_INDEX_PROPERTY_CHANGED, this);
}
public void valueChanged(ListSelectionEvent e) {
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ShowSynchronizeTabAction.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ShowSynchronizeTabAction.java 2008-02-16 20:59:30 UTC (rev 1037)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ShowSynchronizeTabAction.java 2008-02-16 21:00:08 UTC (rev 1038)
@@ -160,7 +160,7 @@
protected class NavigationLocalSelectionListener implements TreeSelectionListener, PropertyChangeListener {
public NavigationLocalSelectionListener() {
- getTabModel().addPropertyChangeListener(SynchronizeTabModel.Properties.SELECTED_LOCAL_NODE_PROPERTY_CHANGED, this);
+ getTabModel().addPropertyChangeListener(SynchronizeTabModel.SELECTED_LOCAL_NODE_PROPERTY_CHANGED, this);
}
public void valueChanged(TreeSelectionEvent e) {
@@ -205,7 +205,7 @@
protected class NavigationRemoteSelectionListener implements TreeSelectionListener, PropertyChangeListener {
public NavigationRemoteSelectionListener() {
- getTabModel().addPropertyChangeListener(SynchronizeTabModel.Properties.SELECTED_REMOTE_NODE_PROPERTY_CHANGED, this);
+ getTabModel().addPropertyChangeListener(SynchronizeTabModel.SELECTED_REMOTE_NODE_PROPERTY_CHANGED, this);
}
public void valueChanged(TreeSelectionEvent e) {
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/ShowListTabAbstractAction.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/ShowListTabAbstractAction.java 2008-02-16 20:59:30 UTC (rev 1037)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/ShowListTabAbstractAction.java 2008-02-16 21:00:08 UTC (rev 1038)
@@ -18,23 +18,19 @@
* ##% */
package fr.cemagref.simexplorer.is.ui.swing.actions.util;
-import fr.cemagref.simexplorer.is.entities.data.LoggableElement;
import fr.cemagref.simexplorer.is.entities.metadata.MetaData;
import fr.cemagref.simexplorer.is.entities.metadata.Version;
import fr.cemagref.simexplorer.is.exceptions.SimExplorerRuntimeException;
-import fr.cemagref.simexplorer.is.ui.StorageServiceHelper;
import fr.cemagref.simexplorer.is.ui.swing.JListTab;
import fr.cemagref.simexplorer.is.ui.swing.ListTabRefreshHelper;
import fr.cemagref.simexplorer.is.ui.swing.SimExplorerActionManager;
-import fr.cemagref.simexplorer.is.ui.swing.SimExplorerTab;
+import fr.cemagref.simexplorer.is.ui.swing.actions.ShowDetailTabAction;
import fr.cemagref.simexplorer.is.ui.swing.actions.ShowSynchronizeTabAction;
-import fr.cemagref.simexplorer.is.ui.swing.model.DetailTabModel;
import fr.cemagref.simexplorer.is.ui.swing.model.ListTabModel;
import fr.cemagref.simexplorer.is.ui.swing.model.ListTableModel;
import jaxx.runtime.swing.JAXXTab;
import static org.codelutin.i18n.I18n._;
-import javax.swing.AbstractAction;
import javax.swing.AbstractButton;
import javax.swing.JTabbedPane;
import javax.swing.event.ListSelectionEvent;
@@ -52,6 +48,9 @@
/** flag pour indiquer si la liste est locale ou remote */
protected boolean remote;
+ /** l'action d'affichage de l'onglet de détail */
+ ShowDetailTabAction detailAction;
+
public ShowListTabAbstractAction(String name, boolean remote) {
super(name);
this.remote = remote;
@@ -75,12 +74,13 @@
if (data == null) {
// first coming here, init model
- model.initTabModel(remote, getContext());
+ model.initTabModel(getContext(), remote);
}
return true;
}
protected void initFirstUsage(final JListTab ui, final ListTabModel model) {
+ detailAction = (ShowDetailTabAction) SimExplorerActionManager.newAction("showTab_detail", (AbstractButton) null);
ui.getShowTab_synchronize().setHideActionText(false);
ui.getExportElement().setHideActionText(false);
ui.getDownloadElement().setHideActionText(false);
@@ -99,8 +99,6 @@
// add a show detail action when double click on a row of the table
ui.getTable().addMouseListener(new MouseAdapter() {
- /** l'action d'affichage de l'onglet de détail */
- AbstractAction detailAction = SimExplorerActionManager.newAction("showTab_detail", (AbstractButton) null);
ShowSynchronizeTabAction synchronizeAction = (ShowSynchronizeTabAction) SimExplorerActionManager.newAction("showTab_synchronize", (AbstractButton) null);
@@ -137,6 +135,11 @@
if (e.isPopupTrigger() && ui.getTablePopupMenu().isEnabled() && row == model.getSelectedIndex()) {
// récupération du metadata sélectionné
MetaData data = model.get(ui.getTable().getSelectedRow());
+ if (data == null) {
+ // selected the row
+
+ return;
+ }
prepareDetailModel(data);
synchronizeAction.setRemote(isRemote());
synchronizeAction.setUuid(data.getUuid());
@@ -159,21 +162,14 @@
modelTab.setData(model.getList());
}
- protected void prepareDetailModel(MetaData data) {
+ protected void prepareDetailModel(MetaData data) {
// récupération de l'uuid à afficher
String uuid = data.getUuid();
// récupération de la version à afficher
Version version = data.getVersion();
- // chargement de l'élément à partir du service
- LoggableElement element = StorageServiceHelper.getElement(getContext(), remote, uuid, version.toString());
- // préparation du modèle de détail
- DetailTabModel detailModel = (DetailTabModel) SimExplorerTab.detail.getModel();
- // on supprime les anciennes données du modèle
- detailModel.reset();
- // positionnement du type de détail (local ou remote)
- detailModel.setRemote(remote);
- // positionnement du rootNode du modèle
- detailModel.setRootNode(element);
+ detailAction.setRemote(isRemote());
+ detailAction.setUuid(data.getUuid());
+ detailAction.setVersion(data.getVersion());
log.info("prepare detail - uuid:" + uuid + ", version:" + version + " (remote ?" + remote + ")");
}
1
0
r1037 - trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing
by tchemit@users.labs.libre-entreprise.org 16 Feb '08
by tchemit@users.labs.libre-entreprise.org 16 Feb '08
16 Feb '08
Author: tchemit
Date: 2008-02-16 20:59:30 +0000 (Sat, 16 Feb 2008)
New Revision: 1037
Modified:
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SimExplorerMainUI.java
Log:
add Ctrl-F4 close
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SimExplorerMainUI.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SimExplorerMainUI.java 2008-02-16 20:58:29 UTC (rev 1036)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SimExplorerMainUI.java 2008-02-16 20:59:30 UTC (rev 1037)
@@ -18,15 +18,16 @@
* ##% */
package fr.cemagref.simexplorer.is.ui.swing;
-import javax.swing.SwingUtilities;
+import javax.swing.AbstractAction;
+import javax.swing.AbstractButton;
import javax.swing.JComponent;
+import javax.swing.JTabbedPane;
import javax.swing.KeyStroke;
-import javax.swing.AbstractAction;
-import javax.swing.JTabbedPane;
+import javax.swing.SwingUtilities;
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
-import java.awt.event.InputEvent;
-import java.awt.event.ActionEvent;
-import java.awt.Component;
/**
* L'ui principale de l'application
@@ -58,6 +59,9 @@
}
}
});
+ // override Ctrl-F4 close application
+ getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_F4, InputEvent.CTRL_MASK), "quit");
+ getRootPane().getActionMap().put("quit", SimExplorerActionManager.newAction("quit", (AbstractButton) null));
// repaint i18n actions
MainUIRefreshHelper.refreshI18nActions(this);
1
0
r1036 - trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model
by tchemit@users.labs.libre-entreprise.org 16 Feb '08
by tchemit@users.labs.libre-entreprise.org 16 Feb '08
16 Feb '08
Author: tchemit
Date: 2008-02-16 20:58:29 +0000 (Sat, 16 Feb 2008)
New Revision: 1036
Modified:
trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/ListTabModel.java
Log:
fix bug if row selected
Modified: trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/ListTabModel.java
===================================================================
--- trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/ListTabModel.java 2008-02-16 20:58:08 UTC (rev 1035)
+++ trunk/simexplorer-is/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/ListTabModel.java 2008-02-16 20:58:29 UTC (rev 1036)
@@ -69,7 +69,7 @@
public MetaData get(int index) {
checkSize(index);
- return getList()[index];
+ return index==-1?null:getList()[index];
}
public boolean isEmpty() {
1
0