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
February 2008
- 2 participants
- 701 discussions
r695 - in trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage: attachment engine
by glandais@users.labs.libre-entreprise.org 06 Feb '08
by glandais@users.labs.libre-entreprise.org 06 Feb '08
06 Feb '08
Author: glandais
Date: 2008-02-06 17:11:44 +0000 (Wed, 06 Feb 2008)
New Revision: 695
Modified:
trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/AttachmentHandler.java
trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/FileSystemAttachmentHandler.java
trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngine.java
trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineImpl.java
Log:
Attachment handling
Modified: trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/AttachmentHandler.java
===================================================================
--- trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/AttachmentHandler.java 2008-02-06 17:11:21 UTC (rev 694)
+++ trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/AttachmentHandler.java 2008-02-06 17:11:44 UTC (rev 695)
@@ -19,6 +19,7 @@
import java.io.InputStream;
+import fr.cemagref.simexplorer.is.attachment.Attachment;
import fr.cemagref.simexplorer.is.entities.metadata.MetaData;
import fr.cemagref.simexplorer.is.storage.SimExplorerStorageException;
@@ -34,15 +35,15 @@
*
* @param entity
* DataEntity related to content
- * @param field
- * Unique field for content
* @param is
* Content
+ * @param attachment
+ * the attachment
*
* @throws SimExplorerStorageException
* the sim explorer storage exception
*/
- public abstract void storeData(MetaData entity, String field, InputStream is)
+ public abstract void storeData(MetaData entity, Attachment attachment, InputStream is)
throws SimExplorerStorageException;
/**
@@ -50,15 +51,15 @@
*
* @param entity
* DataEntity related to content
- * @param field
- * Unique field for content
+ * @param attachment
+ * the attachment
*
* @return Content
*
* @throws SimExplorerStorageException
* the sim explorer storage exception
*/
- public abstract InputStream retrieveData(MetaData entity, String field)
+ public abstract InputStream retrieveData(MetaData entity, Attachment attachment)
throws SimExplorerStorageException;
/**
@@ -66,15 +67,15 @@
*
* @param entity
* the entity
- * @param field
- * the field
+ * @param attachment
+ * the attachment
*
* @return the string
*
* @throws SimExplorerStorageException
* the sim explorer storage exception
*/
- public abstract String retrieveMD5Data(MetaData entity, String field)
+ public abstract String retrieveMD5Data(MetaData entity, Attachment attachment)
throws SimExplorerStorageException;
/**
@@ -82,13 +83,13 @@
*
* @param entity
* DataEntity related to content
- * @param field
- * Unique field for content
+ * @param attachment
+ * the attachment
*
* @throws SimExplorerStorageException
* the sim explorer storage exception
*/
- public abstract void deleteData(MetaData entity, String field)
+ public abstract void deleteData(MetaData entity, Attachment attachment)
throws SimExplorerStorageException;
}
\ No newline at end of file
Modified: trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/FileSystemAttachmentHandler.java
===================================================================
--- trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/FileSystemAttachmentHandler.java 2008-02-06 17:11:21 UTC (rev 694)
+++ trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/FileSystemAttachmentHandler.java 2008-02-06 17:11:44 UTC (rev 695)
@@ -28,6 +28,7 @@
import org.codelutin.util.MD5;
+import fr.cemagref.simexplorer.is.attachment.Attachment;
import fr.cemagref.simexplorer.is.entities.metadata.MetaData;
import fr.cemagref.simexplorer.is.storage.SimExplorerStorageException;
import fr.cemagref.simexplorer.is.storage.util.Config;
@@ -49,12 +50,12 @@
*
* @param entity
* DataEntity related to content
- * @param field
- * Unique field for content
+ * @param attachment
+ * the attachment
*
* @return Instance of file
*/
- private File getFile(MetaData entity, String field) {
+ private File getFile(MetaData entity, Attachment attachment) {
String resultPath = baseFolder;
// Create file path
@@ -66,7 +67,7 @@
resultPath = resultPath + entity.getUuid();
}
resultPath = resultPath + "/" + entity.getVersion().toString() + "/"
- + field;
+ + attachment.getUniqueId();
File result = new File(resultPath);
// Create directories
@@ -82,12 +83,12 @@
* @see fr.cemagref.simexplorer.is.storage.attachment.AttachmentHandler#retrieveData(fr.cemagref.simexplorer.is.entities.metadata.MetaData, java.lang.String)
*/
@Override
- public InputStream retrieveData(MetaData entity, String field)
+ public InputStream retrieveData(MetaData entity, Attachment attachment)
throws SimExplorerStorageException {
// Simple stream on file
FileInputStream fis = null;
try {
- fis = new FileInputStream(getFile(entity, field));
+ fis = new FileInputStream(getFile(entity, attachment));
} catch (FileNotFoundException e) {
throw new SimExplorerStorageException(e);
}
@@ -98,11 +99,11 @@
* @see fr.cemagref.simexplorer.is.storage.attachment.AttachmentHandler#retrieveMD5Data(fr.cemagref.simexplorer.is.entities.metadata.MetaData, java.lang.String)
*/
@Override
- public String retrieveMD5Data(MetaData entity, String field)
+ public String retrieveMD5Data(MetaData entity, Attachment attachment)
throws SimExplorerStorageException {
String md5 = null;
try {
- md5 = MD5.asHex(MD5.getHash(getFile(entity, field)));
+ md5 = MD5.asHex(MD5.getHash(getFile(entity, attachment)));
} catch (Exception e) {
throw new SimExplorerStorageException(e);
}
@@ -113,12 +114,12 @@
* @see fr.cemagref.simexplorer.is.storage.attachment.AttachmentHandler#storeData(fr.cemagref.simexplorer.is.entities.metadata.MetaData, java.lang.String, java.io.InputStream)
*/
@Override
- public void storeData(MetaData entity, String field, InputStream is)
+ public void storeData(MetaData entity, Attachment attachment, InputStream is)
throws SimExplorerStorageException {
// Simple stream on file
try {
- File file = getFile(entity, field);
+ File file = getFile(entity, attachment);
FileOutputStream fos = new FileOutputStream(file);
// Buffer copy stream to stream
@@ -146,11 +147,11 @@
* @see fr.cemagref.simexplorer.is.storage.attachment.AttachmentHandler#deleteData(fr.cemagref.simexplorer.is.entities.metadata.MetaData, java.lang.String)
*/
@Override
- public void deleteData(MetaData entity, String field)
+ public void deleteData(MetaData entity, Attachment attachment)
throws SimExplorerStorageException {
try {
// Simple delete on file
- getFile(entity, field).delete();
+ getFile(entity, attachment).delete();
} catch (Exception e) {
throw new SimExplorerStorageException(e);
}
Modified: trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngine.java
===================================================================
--- trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngine.java 2008-02-06 17:11:21 UTC (rev 694)
+++ trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngine.java 2008-02-06 17:11:44 UTC (rev 695)
@@ -24,6 +24,7 @@
import javax.ejb.Local;
+import fr.cemagref.simexplorer.is.attachment.Attachment;
import fr.cemagref.simexplorer.is.entities.metadata.MetaData;
import fr.cemagref.simexplorer.is.entities.metadata.Version;
import fr.cemagref.simexplorer.is.storage.SimExplorerStorageException;
@@ -72,7 +73,7 @@
* the sim explorer storage exception
*/
public abstract void saveElement(String token, MetaData element,
- Map<String, InputStream> attachments)
+ Map<Attachment, InputStream> attachments)
throws SimExplorerStorageException;
/**
@@ -158,7 +159,7 @@
* the sim explorer storage exception
*/
public abstract InputStream retrieveData(String token, MetaData entity,
- String field) throws SimExplorerStorageException;
+ Attachment attachment) throws SimExplorerStorageException;
/**
* Get number of items corresponding to query.
Modified: trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineImpl.java
===================================================================
--- trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineImpl.java 2008-02-06 17:11:21 UTC (rev 694)
+++ trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineImpl.java 2008-02-06 17:11:44 UTC (rev 695)
@@ -99,33 +99,30 @@
* @see fr.cemagref.simexplorer.is.storage.engine.StorageEngine#saveElement(fr.cemagref.simexplorer.is.entities.metadata.MetaData, java.util.Map)
*/
public void saveElement(String token, MetaData element,
- Map<String, InputStream> attachments)
+ Map<Attachment, InputStream> attachments)
throws SimExplorerStorageException {
// Save all attachments in system
- for (Map.Entry<String, InputStream> entry : attachments.entrySet()) {
+ for (Map.Entry<Attachment, InputStream> entry : attachments.entrySet()) {
attachmentHandler.storeData(element, entry.getKey(), entry
.getValue());
}
// Parse all attachments for indexing
List<Reader> readers = new ArrayList<Reader>();
- for (Map.Entry<String, InputStream> entry : attachments.entrySet()) {
- String field = entry.getKey();
- InputStream content = attachmentHandler
- .retrieveData(element, field);
- if (element.getAttachments() != null) {
- Attachment attachment = findAttachment(field, element
- .getAttachments());
- if (attachment != null) {
- try {
- // Transform stream into indexable text
- Reader reader = attachment.getContentType()
- .renderToText(content);
- readers.add(reader);
- } catch (Exception e) {
- throw new SimExplorerStorageException(e);
- }
+ for (Map.Entry<Attachment, InputStream> entry : attachments.entrySet()) {
+ Attachment attachment = entry.getKey();
+
+ if (attachment.getContentType() != null) {
+ InputStream content = attachmentHandler.retrieveData(element,
+ attachment);
+ try {
+ // Transform stream into indexable text
+ Reader reader = attachment.getContentType().renderToText(
+ content);
+ readers.add(reader);
+ } catch (Exception e) {
+ throw new SimExplorerStorageException(e);
}
}
}
@@ -143,26 +140,6 @@
database.insertElement(element, readers);
}
- /**
- * Find attachment.
- *
- * @param uniqueId
- * the unique id
- * @param attachments
- * the attachments
- *
- * @return the attachment
- */
- private Attachment findAttachment(String uniqueId,
- List<Attachment> attachments) {
- for (Attachment attachment : attachments) {
- if (attachment.getUniqueId().equals(uniqueId)) {
- return attachment;
- }
- }
- return null;
- }
-
// Read
/* (non-Javadoc)
@@ -198,9 +175,9 @@
/* (non-Javadoc)
* @see fr.cemagref.simexplorer.is.storage.engine.StorageEngine#retrieveData(fr.cemagref.simexplorer.is.entities.metadata.MetaData, java.lang.String)
*/
- public InputStream retrieveData(String token, MetaData entity, String field)
- throws SimExplorerStorageException {
- InputStream result = attachmentHandler.retrieveData(entity, field);
+ public InputStream retrieveData(String token, MetaData entity,
+ Attachment attachment) throws SimExplorerStorageException {
+ InputStream result = attachmentHandler.retrieveData(entity, attachment);
return result;
}
@@ -264,20 +241,27 @@
MetaData element = getMetadata(token, uuid, version);
List<Attachment> attachments = element.getAttachments();
for (Attachment attachment : attachments) {
- attachmentHandler.deleteData(element, attachment.getUniqueId());
+ attachmentHandler.deleteData(element, attachment);
}
database.deleteElement(element);
}
// Tools
+ private Attachment getTmpAttachment(String id) {
+ Attachment res = new Attachment();
+ res.setDataHash("");
+ res.setFileName(id);
+ return res;
+ }
+
/* (non-Javadoc)
* @see fr.cemagref.simexplorer.is.storage.engine.StorageEngine#storeTempData(java.io.InputStream)
*/
public String storeTempData(InputStream stream)
throws SimExplorerStorageException {
String id = UUID.randomUUID().toString();
- attachmentHandler.storeData(mdTmp, id, stream);
+ attachmentHandler.storeData(mdTmp, getTmpAttachment(id), stream);
return id;
}
@@ -286,22 +270,24 @@
*/
public InputStream retrieveTempData(String id)
throws SimExplorerStorageException {
- InputStream is = attachmentHandler.retrieveData(mdTmp, id);
+ InputStream is = attachmentHandler.retrieveData(mdTmp,
+ getTmpAttachment(id));
return is;
}
@Override
public String retrieveMD5TempData(String id)
throws SimExplorerStorageException {
- String md5 = attachmentHandler.retrieveMD5Data(mdTmp, id);
+ String md5 = attachmentHandler.retrieveMD5Data(mdTmp,
+ getTmpAttachment(id));
return md5;
}
-
+
/* (non-Javadoc)
* @see fr.cemagref.simexplorer.is.storage.engine.StorageEngine#deleteTempData(java.lang.String)
*/
public void deleteTempData(String id) throws SimExplorerStorageException {
- attachmentHandler.deleteData(mdTmp, id);
+ attachmentHandler.deleteData(mdTmp, getTmpAttachment(id));
}
/* (non-Javadoc)
1
0
r694 - in trunk/simexplorer-is-service/src: java/fr/cemagref/simexplorer/is/service java/fr/cemagref/simexplorer/is/storage/engine test/fr/cemagref/simexplorer/is/service
by glandais@users.labs.libre-entreprise.org 06 Feb '08
by glandais@users.labs.libre-entreprise.org 06 Feb '08
06 Feb '08
Author: glandais
Date: 2008-02-06 17:11:21 +0000 (Wed, 06 Feb 2008)
New Revision: 694
Modified:
trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/AuthenticationService.java
trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/AuthenticationServiceImpl.java
trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageService.java
trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java
trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineSecuImpl.java
trunk/simexplorer-is-service/src/test/fr/cemagref/simexplorer/is/service/StorageServiceMassInsert.java
trunk/simexplorer-is-service/src/test/fr/cemagref/simexplorer/is/service/StorageServiceTest.java
Log:
Attachment handling & User security
Modified: trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/AuthenticationService.java
===================================================================
--- trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/AuthenticationService.java 2008-02-06 17:10:11 UTC (rev 693)
+++ trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/AuthenticationService.java 2008-02-06 17:11:21 UTC (rev 694)
@@ -102,8 +102,8 @@
* @throws SimExplorerServiceException
* the sim explorer service exception
*/
- public void changePassword(String token, String password)
- throws SimExplorerServiceException;
+// public void changePassword(String token, String password)
+// throws SimExplorerServiceException;
/**
* Gets the user.
Modified: trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/AuthenticationServiceImpl.java
===================================================================
--- trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/AuthenticationServiceImpl.java 2008-02-06 17:10:11 UTC (rev 693)
+++ trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/AuthenticationServiceImpl.java 2008-02-06 17:11:21 UTC (rev 694)
@@ -39,6 +39,8 @@
import javax.naming.InitialContext;
import javax.naming.NamingException;
+import org.apache.commons.lang.RandomStringUtils;
+import org.codelutin.i18n.I18n;
import org.jboss.annotation.ejb.RemoteBinding;
import fr.cemagref.simexplorer.is.security.dao.DaoSecurity;
@@ -85,6 +87,27 @@
}
/**
+ * Gets the mail content request account.
+ *
+ * @param login
+ * the login
+ * @param mail
+ * the mail
+ *
+ * @return the mail content request accont
+ */
+ private String getMailContentRequestAccount(String login, String mail) {
+ StringBuffer sb = new StringBuffer("");
+ sb.append(_("simexplorer.service.mail.requestheader")).append("\n");
+ sb.append(_("simexplorer.service.mail.login")).append(" : ").append(
+ login).append("\n");
+ sb.append(_("simexplorer.service.mail.mail")).append(" : ")
+ .append(mail).append("\n");
+ sb.append(_("simexplorer.service.mail.requestfooter")).append("\n");
+ return sb.toString();
+ }
+
+ /**
* Send mail.
*
* @param mail
@@ -149,8 +172,7 @@
* @return the string
*/
private String generatePassword() {
- // FIXME
- return "password";
+ return RandomStringUtils.randomAlphanumeric(10);
}
/**
@@ -256,49 +278,127 @@
}
}
+ /**
+ * Can delete group.
+ *
+ * @param token
+ * the token
+ * @param id
+ * the id
+ *
+ * @return true, if successful
+ * @throws SimExplorerServiceException
+ */
+ private boolean canDeleteGroup(String token, Integer id)
+ throws SimExplorerServiceException {
+ return canAdminGroup(token, id);
+ }
+
+ /**
+ * Delete group impl.
+ *
+ * @param token
+ * the token
+ * @param id
+ * the id
+ */
+ private void deleteGroupImpl(String token, Integer id) {
+ dao.deleteGroup(id);
+ }
+
/* (non-Javadoc)
* @see fr.cemagref.simexplorer.is.service.AuthenticationService#deleteGroup(java.lang.String, java.lang.Integer)
*/
public void deleteGroup(String token, Integer id)
throws SimExplorerServiceException {
- if (canAdminGroup(token, id)) {
- dao.deleteGroup(id);
+ if (canDeleteGroup(token, id)) {
+ deleteGroupImpl(token, id);
+ } else {
+ throw new SimExplorerServiceException(
+ _("simexplorer.service.security.norights"));
}
- throw new SimExplorerServiceException(
- _("simexplorer.service.security.norights"));
}
+ /**
+ * Can delete user.
+ *
+ * @param token
+ * the token
+ * @param id
+ * the id
+ *
+ * @return true, if successful
+ *
+ * @throws SimExplorerServiceException
+ * the sim explorer service exception
+ */
+ private boolean canDeleteUser(String token, Integer id)
+ throws SimExplorerServiceException {
+ return canAdminUser(token, id);
+ }
+
+ /**
+ * Delete user impl.
+ *
+ * @param token
+ * the token
+ * @param id
+ * the id
+ */
+ private void deleteUserImpl(String token, Integer id) {
+ dao.deleteUser(id);
+ }
+
/* (non-Javadoc)
* @see fr.cemagref.simexplorer.is.service.AuthenticationService#deleteUser(java.lang.String, java.lang.Integer)
*/
public void deleteUser(String token, Integer id)
throws SimExplorerServiceException {
- if (canAdminUser(token, id)) {
- dao.deleteUser(id);
+ if (canDeleteUser(token, id)) {
+ deleteUserImpl(token, id);
+ } else {
+ throw new SimExplorerServiceException(
+ _("simexplorer.service.security.norights"));
}
- throw new SimExplorerServiceException(
- _("simexplorer.service.security.norights"));
}
+ /**
+ * Can view elements.
+ *
+ * @param token
+ * the token
+ *
+ * @return true, if successful
+ * @throws SimExplorerServiceException
+ */
+ private boolean canViewElements(String token)
+ throws SimExplorerServiceException {
+ User loggedUser = getLoggedUser(token);
+ // boolean canView = loggedUser.isAdmin() || loggedUser.isSuperAdmin();
+ // return canView;
+ return (loggedUser != null);
+ }
+
/* (non-Javadoc)
* @see fr.cemagref.simexplorer.is.service.AuthenticationService#getGroup(java.lang.String, java.lang.Integer)
*/
public Group getGroup(String token, Integer id)
throws SimExplorerServiceException {
- if (canAdminGroup(token, id)) {
- return dao.getGroup(id);
+ if (canViewElements(token)) {
+ Group group = dao.getGroup(id);
+ return group;
}
throw new SimExplorerServiceException(
_("simexplorer.service.security.norights"));
}
/* (non-Javadoc)
- * @see fr.cemagref.simexplorer.is.service.AuthenticationService#getGroup(java.lang.String, java.lang.String)
- */
+ * @see fr.cemagref.simexplorer.is.service.AuthenticationService#getGroup(java.lang.String, java.lang.String)
+ */
public Group getGroup(String token, String name)
throws SimExplorerServiceException {
- Group group = dao.getGroup(name);
- if (canAdminGroup(token, group.getId())) {
+ if (canViewElements(token)) {
+ Group group = dao.getGroup(name);
return group;
}
throw new SimExplorerServiceException(
@@ -310,8 +410,9 @@
*/
public User getUser(String token, Integer id)
throws SimExplorerServiceException {
- if (canAdminUser(token, id)) {
- return dao.getUser(id);
+ if (canViewElements(token)) {
+ User user = dao.getUser(id);
+ return user;
}
throw new SimExplorerServiceException(
_("simexplorer.service.security.norights"));
@@ -322,24 +423,47 @@
*/
public User getUser(String token, String login)
throws SimExplorerServiceException {
- User user = dao.getUser(login);
- if (canAdminUser(token, user.getId())) {
+ if (canViewElements(token)) {
+ User user = dao.getUser(login);
return user;
}
throw new SimExplorerServiceException(
_("simexplorer.service.security.norights"));
}
+ /**
+ * Can save element.
+ *
+ * @param token
+ * the token
+ *
+ * @return true, if successful
+ *
+ * @throws SimExplorerServiceException
+ * the sim explorer service exception
+ */
+ private boolean canSaveElement(String token)
+ throws SimExplorerServiceException {
+ User loggedUser = getLoggedUser(token);
+ boolean canView = loggedUser.isAdmin() || loggedUser.isSuperAdmin();
+ return canView;
+ }
+
/* (non-Javadoc)
* @see fr.cemagref.simexplorer.is.service.AuthenticationService#saveGroup(java.lang.String, java.lang.String)
*/
public Group saveGroup(String token, String name)
throws SimExplorerServiceException {
- User loggedUser = getLoggedUser(token);
- if (loggedUser.isAdmin() || loggedUser.isSuperAdmin()) {
+ if (canSaveElement(token)) {
+ Group oldGroup = dao.getGroup(name);
+ if (oldGroup != null) {
+ throw new SimExplorerServiceException(
+ _("simexplorer.service.business.groupexist"));
+ }
+
Group group = new Group();
group.setName(name);
- group.setOwner(loggedUser);
+ group.setOwner(getLoggedUser(token));
dao.saveGroup(group);
group = getGroup(token, group.getId());
return group;
@@ -353,8 +477,13 @@
*/
public User saveUser(String token, String login, String mail)
throws SimExplorerServiceException {
- User loggedUser = getLoggedUser(token);
- if (loggedUser.isAdmin() || loggedUser.isSuperAdmin()) {
+ if (canSaveElement(token)) {
+ User oldUser = dao.getUser(login);
+ if (oldUser != null) {
+ throw new SimExplorerServiceException(
+ _("simexplorer.service.business.userexist"));
+ }
+
User user = new User();
user.setLogin(login);
user.setMail(mail);
@@ -373,24 +502,70 @@
_("simexplorer.service.security.norights"));
}
+ /**
+ * Can update group.
+ *
+ * @param token
+ * the token
+ * @param id
+ * the id
+ *
+ * @return true, if successful
+ *
+ * @throws SimExplorerServiceException
+ * the sim explorer service exception
+ */
+ private boolean canUpdateGroup(String token, Integer id)
+ throws SimExplorerServiceException {
+ return canAdminGroup(token, id);
+ }
+
/* (non-Javadoc)
* @see fr.cemagref.simexplorer.is.service.AuthenticationService#updateGroup(java.lang.String, fr.cemagref.simexplorer.is.security.entities.Group)
*/
public Group updateGroup(String token, Group group)
throws SimExplorerServiceException {
- if (canAdminGroup(token, group.getId())) {
+ if (canUpdateGroup(token, group.getId())) {
return dao.updateGroup(group);
}
throw new SimExplorerServiceException(
_("simexplorer.service.security.norights"));
}
+ /**
+ * Can update user.
+ *
+ * @param token
+ * the token
+ * @param user
+ * the user
+ *
+ * @return true, if successful
+ *
+ * @throws SimExplorerServiceException
+ * the sim explorer service exception
+ */
+ private boolean canUpdateUser(String token, User user)
+ throws SimExplorerServiceException {
+ if (canAdminUser(token, user.getId())) {
+ if (getLoggedUser(token).isSuperAdmin()) {
+ return true;
+ }
+ User oldUser = dao.getUser(user.getId());
+ if (oldUser.isAdmin() == user.isAdmin()
+ && oldUser.isSuperAdmin() == user.isSuperAdmin()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
/* (non-Javadoc)
* @see fr.cemagref.simexplorer.is.service.AuthenticationService#updateUser(java.lang.String, fr.cemagref.simexplorer.is.security.entities.User)
*/
public User updateUser(String token, User user)
throws SimExplorerServiceException {
- if (canAdminUser(token, user.getId())) {
+ if (canUpdateUser(token, user)) {
return dao.updateUser(user);
}
throw new SimExplorerServiceException(
@@ -439,12 +614,14 @@
public String loginUser(String login, String password)
throws SimExplorerServiceException {
if (!superAdminCheck) {
+ I18n.initISO88591("fr", "FR");
checkSuperAdmin();
superAdminCheck = true;
}
String token = null;
User loggedUser = dao.loginUser(login, computeHash(password));
if (loggedUser != null) {
+ // FIXME delete previous tokens
// dao.deleteTokens(login, 10 * 60 * 1000);
LoginAction loginAction = new LoginAction();
@@ -462,31 +639,21 @@
*/
public void requestAccount(String login, String mail)
throws SimExplorerServiceException {
- // FIXME send mail to superadmin
- /*
- User user = new User();
- user.setLogin(login);
- user.setMail(mail);
- String password = generatePassword();
- sendMail(login, mail, password);
- String passwordHash = computeHash(password);
- user.setPasswordHash(passwordHash);
- dao.saveUser(user);
- return user;
- */
+ User superadmin = dao.getUser("superadmin");
+ sendMail(superadmin.getMail(), _("simexplorer.service.mail.subject"),
+ getMailContentRequestAccount(login, mail));
}
/* (non-Javadoc)
* @see fr.cemagref.simexplorer.is.service.AuthenticationService#changePassword(java.lang.String, java.lang.String)
*/
- public void changePassword(String token, String password)
- throws SimExplorerServiceException {
- User user = getLoggedUser(token);
- String passwordHash = computeHash(password);
- user.setPasswordHash(passwordHash);
- dao.updateUser(user);
- }
-
+ // public void changePassword(String token, String password)
+ // throws SimExplorerServiceException {
+ // User user = getLoggedUser(token);
+ // String passwordHash = computeHash(password);
+ // user.setPasswordHash(passwordHash);
+ // dao.updateUser(user);
+ // }
/* (non-Javadoc)
* @see fr.cemagref.simexplorer.is.service.AuthenticationService#resetPassword(java.lang.String, java.lang.String)
*/
@@ -495,7 +662,8 @@
User user = getUser(token, login);
if (canAdminUser(token, user.getId())) {
String password = generatePassword();
- sendMail(login, user.getMail(), password);
+ sendMail(user.getMail(), _("simexplorer.service.mail.subject"),
+ getMailContentWithPassword(login, password));
String passwordHash = computeHash(password);
user.setPasswordHash(passwordHash);
dao.updateUser(user);
@@ -508,125 +676,172 @@
/* (non-Javadoc)
* @see fr.cemagref.simexplorer.is.service.AuthenticationService#getGroups(java.lang.String)
*/
- public Group[] getGroups(String token) {
- List<Group> groups = dao.getGroups();
- Group[] result;
- result = groups.toArray(new Group[groups.size()]);
- return result;
+ public Group[] getGroups(String token) throws SimExplorerServiceException {
+ if (canViewElements(token)) {
+ List<Group> groups = dao.getGroups();
+ Group[] result = groups.toArray(new Group[groups.size()]);
+ return result;
+ }
+ throw new SimExplorerServiceException(
+ _("simexplorer.service.security.norights"));
}
/* (non-Javadoc)
* @see fr.cemagref.simexplorer.is.service.AuthenticationService#getGroupsOwnedBy(java.lang.String, fr.cemagref.simexplorer.is.security.entities.User)
*/
- public Group[] getGroupsOwnedBy(String token, User user) {
- List<Group> list = dao.getGroupsOwnedBy(user);
- return list.toArray(new Group[list.size()]);
+ public Group[] getGroupsOwnedBy(String token, User user)
+ throws SimExplorerServiceException {
+ if (canViewElements(token)) {
+ List<Group> list = dao.getGroupsOwnedBy(user);
+ Group[] groups = list.toArray(new Group[list.size()]);
+ return groups;
+ }
+ throw new SimExplorerServiceException(
+ _("simexplorer.service.security.norights"));
}
/* (non-Javadoc)
* @see fr.cemagref.simexplorer.is.service.AuthenticationService#getUsers(java.lang.String)
*/
- public User[] getUsers(String token) {
- List<User> users = dao.getUsers();
- return users.toArray(new User[users.size()]);
+ public User[] getUsers(String token) throws SimExplorerServiceException {
+ if (canViewElements(token)) {
+ List<User> users = dao.getUsers();
+ User[] arrayUsers = users.toArray(new User[users.size()]);
+ return arrayUsers;
+ }
+ throw new SimExplorerServiceException(
+ _("simexplorer.service.security.norights"));
}
/* (non-Javadoc)
* @see fr.cemagref.simexplorer.is.service.AuthenticationService#getUsersOfGroup(java.lang.String, fr.cemagref.simexplorer.is.security.entities.Group)
*/
- public User[] getUsersOfGroup(String token, Group group) {
- List<User> usersOfGroup = dao.getUsersOfGroup(group);
- return usersOfGroup.toArray(new User[usersOfGroup.size()]);
+ public User[] getUsersOfGroup(String token, Group group)
+ throws SimExplorerServiceException {
+ if (canViewElements(token)) {
+ List<User> usersOfGroup = dao.getUsersOfGroup(group);
+ User[] array = usersOfGroup.toArray(new User[usersOfGroup.size()]);
+ return array;
+ }
+ throw new SimExplorerServiceException(
+ _("simexplorer.service.security.norights"));
}
/* (non-Javadoc)
* @see fr.cemagref.simexplorer.is.service.AuthenticationService#setUsersOfGroup(java.lang.String, fr.cemagref.simexplorer.is.security.entities.Group, java.lang.Integer[])
*/
public void setUsersOfGroup(String token, Group group,
- Integer[] usersInGroup) {
- List<Integer> newUsers = new ArrayList<Integer>();
- newUsers.addAll(Arrays.asList(usersInGroup));
+ Integer[] usersInGroup) throws SimExplorerServiceException {
+ if (canUpdateGroup(token, group.getId())) {
+ List<Integer> newUsers = new ArrayList<Integer>();
+ newUsers.addAll(Arrays.asList(usersInGroup));
- List<Integer> usersToAdd = new ArrayList<Integer>();
- List<Integer> usersToRemove = new ArrayList<Integer>();
+ List<Integer> usersToAdd = new ArrayList<Integer>();
+ List<Integer> usersToRemove = new ArrayList<Integer>();
- List<User> users = dao.getUsersOfGroup(group);
+ List<User> users = dao.getUsersOfGroup(group);
- List<Integer> currentUsers = new ArrayList<Integer>();
- for (User user : users) {
- currentUsers.add(user.getId());
- }
+ List<Integer> currentUsers = new ArrayList<Integer>();
+ for (User user : users) {
+ currentUsers.add(user.getId());
+ }
- for (Integer user : currentUsers) {
- if (!newUsers.contains(user)) {
- usersToRemove.add(user);
+ for (Integer user : currentUsers) {
+ if (!newUsers.contains(user)) {
+ usersToRemove.add(user);
+ }
}
- }
- for (Integer user : newUsers) {
- if (!currentUsers.contains(user)) {
- usersToAdd.add(user);
+ for (Integer user : newUsers) {
+ if (!currentUsers.contains(user)) {
+ usersToAdd.add(user);
+ }
}
- }
- for (Integer idUser : usersToAdd) {
- User user = dao.getUser(idUser);
- user.getGroups().add(group);
- dao.updateUser(user);
+ for (Integer idUser : usersToAdd) {
+ User user = dao.getUser(idUser);
+ user.getGroups().add(group);
+ dao.updateUser(user);
+ }
+ for (Integer idUser : usersToRemove) {
+ User user = dao.getUser(idUser);
+ removeUserFromGroup(user, group);
+ dao.updateUser(user);
+ }
+ } else {
+ throw new SimExplorerServiceException(
+ _("simexplorer.service.security.norights"));
}
- for (Integer idUser : usersToRemove) {
- User user = dao.getUser(idUser);
- removeUserFromGroup(user, group);
- dao.updateUser(user);
- }
}
/* (non-Javadoc)
* @see fr.cemagref.simexplorer.is.service.AuthenticationService#setGroupsOfUser(java.lang.String, fr.cemagref.simexplorer.is.security.entities.User, java.lang.Integer[])
*/
- public void setGroupsOfUser(String token, User user, Integer[] groupsIds) {
- User realUser = dao.getUser(user.getId());
- realUser.getGroups().clear();
- for (Integer groupsId : groupsIds) {
- Group group = dao.getGroup(groupsId);
- realUser.getGroups().add(group);
+ public void setGroupsOfUser(String token, User user, Integer[] groupsIds)
+ throws SimExplorerServiceException {
+ if (canUpdateUser(token, user)) {
+ User realUser = dao.getUser(user.getId());
+ realUser.getGroups().clear();
+ for (Integer groupsId : groupsIds) {
+ Group group = dao.getGroup(groupsId);
+ realUser.getGroups().add(group);
+ }
+ dao.updateUser(realUser);
+ } else {
+ throw new SimExplorerServiceException(
+ _("simexplorer.service.security.norights"));
}
- dao.updateUser(realUser);
-
}
/* (non-Javadoc)
* @see fr.cemagref.simexplorer.is.service.AuthenticationService#getGroupsOfUser(java.lang.String, fr.cemagref.simexplorer.is.security.entities.User)
*/
- public Group[] getGroupsOfUser(String token, User user) {
- List<Group> list = dao.getGroupsOfUser(user);
- return list.toArray(new Group[list.size()]);
+ public Group[] getGroupsOfUser(String token, User user)
+ throws SimExplorerServiceException {
+ if (canViewElements(token)) {
+ List<Group> list = dao.getGroupsOfUser(user);
+ return list.toArray(new Group[list.size()]);
+ }
+ throw new SimExplorerServiceException(
+ _("simexplorer.service.security.norights"));
}
/* (non-Javadoc)
* @see fr.cemagref.simexplorer.is.service.AuthenticationService#getGroupsOfGroup(java.lang.String, fr.cemagref.simexplorer.is.security.entities.Group)
*/
- public Group[] getGroupsOfGroup(String token, Group group) {
- List<Group> groupsOfGroup = dao.getGroupsOfGroup(group);
- return groupsOfGroup.toArray(new Group[groupsOfGroup.size()]);
+ public Group[] getGroupsOfGroup(String token, Group group)
+ throws SimExplorerServiceException {
+ if (canViewElements(token)) {
+ List<Group> groupsOfGroup = dao.getGroupsOfGroup(group);
+ return groupsOfGroup.toArray(new Group[groupsOfGroup.size()]);
+ }
+ throw new SimExplorerServiceException(
+ _("simexplorer.service.security.norights"));
}
/* (non-Javadoc)
* @see fr.cemagref.simexplorer.is.service.AuthenticationService#setGroupsOfGroup(java.lang.String, fr.cemagref.simexplorer.is.security.entities.Group, java.lang.Integer[])
*/
- public void setGroupsOfGroup(String token, Group group, Integer[] groupsIds) {
- Group realGroup = dao.getGroup(group.getId());
- realGroup.getGroups().clear();
- for (Integer groupsId : groupsIds) {
- Group groupOwned = dao.getGroup(groupsId);
- realGroup.getGroups().add(groupOwned);
+ public void setGroupsOfGroup(String token, Group group, Integer[] groupsIds)
+ throws SimExplorerServiceException {
+ if (canUpdateGroup(token, group.getId())) {
+ Group realGroup = dao.getGroup(group.getId());
+ realGroup.getGroups().clear();
+ for (Integer groupsId : groupsIds) {
+ Group groupOwned = dao.getGroup(groupsId);
+ realGroup.getGroups().add(groupOwned);
+ }
+ dao.updateGroup(realGroup);
+ } else {
+ throw new SimExplorerServiceException(
+ _("simexplorer.service.security.norights"));
}
- dao.updateGroup(realGroup);
}
/* (non-Javadoc)
* @see fr.cemagref.simexplorer.is.service.AuthenticationService#getPermissions(java.lang.String)
*/
public Permission[] getPermissions(String uuid) {
+ // FIXME
List<Permission> permissions = dao.getPermissions(uuid);
return permissions.toArray(new Permission[permissions.size()]);
}
@@ -635,6 +850,7 @@
* @see fr.cemagref.simexplorer.is.service.AuthenticationService#setPermissions(java.lang.String, fr.cemagref.simexplorer.is.security.entities.Permission[])
*/
public void setPermissions(String uuid, Permission[] permissions) {
+ // FIXME
dao.setPermissions(uuid, permissions);
}
Modified: trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageService.java
===================================================================
--- trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageService.java 2008-02-06 17:10:11 UTC (rev 693)
+++ trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageService.java 2008-02-06 17:11:21 UTC (rev 694)
@@ -23,6 +23,7 @@
import com.healthmarketscience.rmiio.RemoteInputStream;
+import fr.cemagref.simexplorer.is.attachment.Attachment;
import fr.cemagref.simexplorer.is.entities.data.LoggableElement;
import fr.cemagref.simexplorer.is.entities.metadata.MetaData;
@@ -91,7 +92,7 @@
* the sim explorer service exception
*/
MetaData saveElement(String token, RemoteInputStream xmlRemoteStream,
- Map<String, RemoteInputStream> attachmentsRemoteStream)
+ Map<Attachment, RemoteInputStream> attachmentsRemoteStream)
throws SimExplorerServiceException;
/**
@@ -182,7 +183,7 @@
* the sim explorer service exception
*/
RemoteInputStream retrieveData(String token, String uuid, String version,
- String dataKey) throws SimExplorerServiceException;
+ Attachment attachment) throws SimExplorerServiceException;
/**
* Retrieve number of elements matching query.
Modified: trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java
===================================================================
--- trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java 2008-02-06 17:10:11 UTC (rev 693)
+++ trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java 2008-02-06 17:11:21 UTC (rev 694)
@@ -41,6 +41,7 @@
import com.healthmarketscience.rmiio.SimpleRemoteInputStream;
import fr.cemagref.simexplorer.is.attachment.Attachment;
+import fr.cemagref.simexplorer.is.entities.data.DataEntity;
import fr.cemagref.simexplorer.is.entities.data.LoggableElement;
import fr.cemagref.simexplorer.is.entities.metadata.MetaData;
import fr.cemagref.simexplorer.is.entities.metadata.Version;
@@ -56,6 +57,8 @@
public abstract class StorageServiceCommon implements StorageService,
XmlConstants {
+ private Attachment xmlAttachment = null;
+
/**
* Gets the storage engine.
*
@@ -77,6 +80,15 @@
getStorageEngine().close();
}
+ private Attachment getXMLAttachment() {
+ if (xmlAttachment == null) {
+ xmlAttachment = new Attachment();
+ xmlAttachment.setDataHash("");
+ xmlAttachment.setFileName("entity.xml");
+ }
+ return xmlAttachment;
+ }
+
/* (non-Javadoc)
* @see fr.cemagref.simexplorer.is.service.StorageService#commit()
*/
@@ -107,13 +119,13 @@
*/
public MetaData saveElement(String token,
RemoteInputStream xmlRemoteStream,
- Map<String, RemoteInputStream> attachmentsRemoteStream)
+ Map<Attachment, RemoteInputStream> attachmentsRemoteStream)
throws SimExplorerServiceException {
try {
InputStream xmlStream = RemoteInputStreamClient
.wrap(xmlRemoteStream);
- Map<String, InputStream> attachmentStreams = new HashMap<String, InputStream>();
- for (Map.Entry<String, RemoteInputStream> entry : attachmentsRemoteStream
+ Map<Attachment, InputStream> attachmentStreams = new HashMap<Attachment, InputStream>();
+ for (Map.Entry<Attachment, RemoteInputStream> entry : attachmentsRemoteStream
.entrySet()) {
InputStream stream = RemoteInputStreamClient.wrap(entry
.getValue());
@@ -214,10 +226,11 @@
try {
LoggableElement le;
- le = (LoggableElement) BaseEntityFactory.getFactory(
- LoggableElement.class.getPackage().getName() + DOT
- + mde.getType()).loadElement(
- getStorageEngine().retrieveData(token, mde, KEY_XML));
+ BaseEntityFactory<? extends DataEntity> factory = BaseEntityFactory
+ .getFactory(LoggableElement.class.getPackage().getName()
+ + DOT + mde.getType());
+ le = (LoggableElement) factory.loadElement(getStorageEngine()
+ .retrieveData(token, mde, getXMLAttachment()));
return le;
} catch (Exception e) {
@@ -263,7 +276,23 @@
}
}
}
- MetaData elementSaved = saveElement(token, xmlFile, attachments);
+
+ Map<Attachment, String> realAttachments = new HashMap<Attachment, String>();
+
+ // Load metadata xml
+ MetaDataFactory<MetaData> mdeFactory = MetaDataFactory
+ .getFactory(MetaData.class);
+ MetaData metaData = mdeFactory
+ .loadElementFromParentXML(getStorageEngine()
+ .retrieveTempData(xmlFile));
+
+ List<Attachment> mdeAttachments = metaData.getAttachments();
+ for (Attachment attachment : mdeAttachments) {
+ realAttachments.put(attachment, attachments.get(attachment
+ .getUniqueId()));
+ }
+
+ MetaData elementSaved = saveElement(token, xmlFile, realAttachments);
getStorageEngine().deleteTempData(xmlFile);
for (Map.Entry<String, String> tmpId : attachments.entrySet()) {
getStorageEngine().deleteTempData(tmpId.getValue());
@@ -290,18 +319,18 @@
* the exception
*/
private MetaData saveElement(String token, InputStream xmlFile,
- Map<String, InputStream> attachments) throws Exception {
+ Map<Attachment, InputStream> attachments) throws Exception {
// Store temporary data
String idxml = getStorageEngine().storeTempData(xmlFile);
- Map<String, String> idsattachment = new HashMap<String, String>();
- for (Map.Entry<String, InputStream> entry : attachments.entrySet()) {
+ Map<Attachment, String> idsattachment = new HashMap<Attachment, String>();
+ for (Map.Entry<Attachment, InputStream> entry : attachments.entrySet()) {
String idattachment = getStorageEngine().storeTempData(
entry.getValue());
idsattachment.put(entry.getKey(), idattachment);
}
MetaData elementSaved = saveElement(token, idxml, idsattachment);
getStorageEngine().deleteTempData(idxml);
- for (Map.Entry<String, String> tmpId : idsattachment.entrySet()) {
+ for (Map.Entry<Attachment, String> tmpId : idsattachment.entrySet()) {
getStorageEngine().deleteTempData(tmpId.getValue());
}
return elementSaved;
@@ -311,11 +340,12 @@
* @see fr.cemagref.simexplorer.is.service.StorageService#retrieveData(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
*/
public RemoteInputStream retrieveData(String token, String uuid,
- String version, String dataKey) throws SimExplorerServiceException {
+ String version, Attachment attachment)
+ throws SimExplorerServiceException {
try {
MetaData mde = getMetadata(token, uuid, version);
InputStream stream = getStorageEngine().retrieveData(token, mde,
- dataKey);
+ attachment);
RemoteInputStreamServer remoteStream = new SimpleRemoteInputStream(
stream);
return remoteStream.export();
@@ -334,7 +364,7 @@
MetaData mde = getMetadata(token, uuid, version);
try {
InputStream xmlStream = getStorageEngine().retrieveData(token, mde,
- KEY_XML);
+ getXMLAttachment());
RemoteInputStreamServer remoteStream = new SimpleRemoteInputStream(
xmlStream);
return remoteStream.export();
@@ -358,7 +388,7 @@
Map<String, InputStream> files = new HashMap<String, InputStream>();
files.put(FILE_XML, getStorageEngine().retrieveData(token, mde,
- KEY_XML));
+ getXMLAttachment()));
List<LoggableElement> children = element.getChildren();
for (LoggableElement loggableElement : children) {
MetaData thisMde = loggableElement.getMetaData();
@@ -367,8 +397,7 @@
for (Attachment attachment : attachments) {
files.put(FILE_DATA_PREFIX + FOLDER_SEPARATOR
+ attachment.getUniqueId(), getStorageEngine()
- .retrieveData(token, thisMde,
- attachment.getFileName()));
+ .retrieveData(token, thisMde, attachment));
}
}
@@ -404,7 +433,7 @@
* the exception
*/
private MetaData saveElement(String token, String idxml,
- Map<String, String> idsattachment) throws Exception {
+ Map<Attachment, String> idsattachment) throws Exception {
// Load metadata xml
MetaDataFactory<MetaData> mdeFactory = MetaDataFactory
.getFactory(MetaData.class);
@@ -433,13 +462,14 @@
processVersionRules(token, metaData);
// Prepare saving
- Map<String, InputStream> attachments = new HashMap<String, InputStream>();
+ Map<Attachment, InputStream> attachments = new HashMap<Attachment, InputStream>();
- attachments.put(KEY_XML, getStorageEngine().retrieveTempData(idxml));
+ attachments.put(getXMLAttachment(), getStorageEngine()
+ .retrieveTempData(idxml));
List<Attachment> realAttachments = metaData.getAttachments();
for (Attachment attachment : realAttachments) {
- String idAttachment = idsattachment.get(attachment.getUniqueId());
+ String idAttachment = idsattachment.get(attachment);
// Check hash of attachments
String md5 = getStorageEngine().retrieveMD5TempData(idAttachment);
@@ -448,8 +478,8 @@
_("simexplorer.service.invalidhash"));
}
- attachments.put(attachment.getFileName(), getStorageEngine()
- .retrieveTempData(idAttachment));
+ attachments.put(attachment, getStorageEngine().retrieveTempData(
+ idAttachment));
}
getStorageEngine().saveElement(token, metaData, attachments);
@@ -477,7 +507,7 @@
*/
private void saveSubElements(String token, String idxml,
String entitiesNode, String entityNode,
- Map<String, String> idsattachment) throws Exception {
+ Map<Attachment, String> idsattachment) throws Exception {
BaseEntityFactory<MetaData> elementFactory = MetaDataFactory
.getFactory(MetaData.class);
Modified: trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineSecuImpl.java
===================================================================
--- trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineSecuImpl.java 2008-02-06 17:10:11 UTC (rev 693)
+++ trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineSecuImpl.java 2008-02-06 17:11:21 UTC (rev 694)
@@ -27,6 +27,7 @@
import javax.ejb.Local;
import javax.ejb.Stateless;
+import fr.cemagref.simexplorer.is.attachment.Attachment;
import fr.cemagref.simexplorer.is.entities.metadata.MetaData;
import fr.cemagref.simexplorer.is.entities.metadata.Version;
import fr.cemagref.simexplorer.is.security.credentials.CredentialManager;
@@ -177,13 +178,13 @@
* @see fr.cemagref.simexplorer.is.storage.engine.StorageEngineImpl#retrieveData(java.lang.String, fr.cemagref.simexplorer.is.entities.metadata.MetaData, java.lang.String)
*/
@Override
- public InputStream retrieveData(String token, MetaData entity, String field)
+ public InputStream retrieveData(String token, MetaData entity, Attachment attachment)
throws SimExplorerStorageException {
InputStream stream;
Permission permission = credentialManager.getPermission(token, entity
.getUuid());
if (permission != null && permission.isCanRead()) {
- stream = super.retrieveData(token, entity, field);
+ stream = super.retrieveData(token, entity, attachment);
} else {
throw new SimExplorerStorageException(
_("simexplorer.service.security.norights"));
@@ -196,7 +197,7 @@
*/
@Override
public void saveElement(String token, MetaData element,
- Map<String, InputStream> attachments)
+ Map<Attachment, InputStream> attachments)
throws SimExplorerStorageException {
Permission permission = credentialManager.getPermission(token, element
.getUuid());
Modified: trunk/simexplorer-is-service/src/test/fr/cemagref/simexplorer/is/service/StorageServiceMassInsert.java
===================================================================
--- trunk/simexplorer-is-service/src/test/fr/cemagref/simexplorer/is/service/StorageServiceMassInsert.java 2008-02-06 17:10:11 UTC (rev 693)
+++ trunk/simexplorer-is-service/src/test/fr/cemagref/simexplorer/is/service/StorageServiceMassInsert.java 2008-02-06 17:11:21 UTC (rev 694)
@@ -125,9 +125,11 @@
ea.getMetaData().setVersion(
parentEa.getMetaData().getVersion().toString());
- ea.getMetaData().getVersion().incVersion(r.nextInt(3));
+ ea.getMetaData().setVersion(
+ ea.getMetaData().getVersion().incVersion(r.nextInt(3))
+ .toString());
- Map<String, RemoteInputStream> attachments = new HashMap<String, RemoteInputStream>();
+ Map<Attachment, RemoteInputStream> attachments = new HashMap<Attachment, RemoteInputStream>();
List<Attachment> attachmentsKeys = new ArrayList<Attachment>();
@@ -154,8 +156,7 @@
attachment.setDataHash(randomStream.getMd5());
RemoteInputStreamServer remoteStream = new SimpleRemoteInputStream(
randomStream.getStream());
- attachments.put(attachment.getUniqueId(), remoteStream
- .export());
+ attachments.put(attachment, remoteStream.export());
}
InputStream xmlStream = BaseEntityFactory.getFactory(
Modified: trunk/simexplorer-is-service/src/test/fr/cemagref/simexplorer/is/service/StorageServiceTest.java
===================================================================
--- trunk/simexplorer-is-service/src/test/fr/cemagref/simexplorer/is/service/StorageServiceTest.java 2008-02-06 17:10:11 UTC (rev 693)
+++ trunk/simexplorer-is-service/src/test/fr/cemagref/simexplorer/is/service/StorageServiceTest.java 2008-02-06 17:11:21 UTC (rev 694)
@@ -31,8 +31,7 @@
import com.healthmarketscience.rmiio.RemoteInputStreamServer;
import com.healthmarketscience.rmiio.SimpleRemoteInputStream;
-import fr.cemagref.simexplorer.is.service.StorageService;
-import fr.cemagref.simexplorer.is.service.StorageServiceClient;
+import fr.cemagref.simexplorer.is.attachment.Attachment;
/**
* The Class StorageServiceTest.
@@ -79,91 +78,4 @@
assertNotNull(storageService.getMetadata(null, "abcd"));
}
- /**
- * Test insert element streams.
- *
- * @throws Exception
- * the exception
- */
- public void testInsertElementStreams() throws Exception {
- String id = UUID.randomUUID().toString();
- String[] randomcontent = new String[2];
- for (int i = 0; i < randomcontent.length; i++) {
- randomcontent[i] = Long.toHexString(r.nextLong());
- }
-
- StringBuffer xmlString = new StringBuffer(
- "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>");
- xmlString.append("<data>");
- xmlString.append("<metadata>");
- xmlString.append("<uuid>" + id + "</uuid>");
- xmlString.append("<version>1.0</version>");
- xmlString.append("<name>Test element</name>");
- xmlString.append("<type>TEST</type>");
- xmlString.append("<description>Element test</description>");
- xmlString.append("<creationdate>0</creationdate>");
- xmlString.append("<hash>AAAAA</hash>");
- /*
- * xmlString.append("<parentdatauuid></parentdatauuid>");
- * xmlString.append("<parentdataversion></parentdataversion>");
- * xmlString.append("<parentversionuuid></parentversionuuid>");
- * xmlString.append("<parentversionversion></parentversionversion>");
- */
- xmlString.append("<descriptors>");
- xmlString
- .append("<descriptor><name>a</name><value>1</value></descriptor>");
- xmlString
- .append("<descriptor><name>b</name><value>2</value></descriptor>");
- xmlString
- .append("<descriptor><name>c</name><value>3</value></descriptor>");
- xmlString.append("</descriptors>");
- xmlString.append("<attachments>");
- for (int i = 0; i < randomcontent.length; i++) {
- xmlString.append("<attachment>");
- xmlString.append("<name>content" + i
- + "</name><type>RawType</type>");
- xmlString.append("</attachment>");
- }
- xmlString.append("</attachments>");
- xmlString.append("</metadata>");
- xmlString.append("</data>");
-
- InputStream xmlStream = new ByteArrayInputStream(xmlString.toString()
- .getBytes());
- RemoteInputStreamServer xmlRemoteStream = new SimpleRemoteInputStream(
- xmlStream);
-
- Map<String, RemoteInputStream> attachmentsRemoteStream = new HashMap<String, RemoteInputStream>();
-
- for (int j = 0; j < randomcontent.length; j++) {
-
- StringBuffer contentString = new StringBuffer("");
- for (int i = 0; i < 50; i++) {
- contentString.append(Long.toHexString(r.nextLong()))
- .append(" ");
- }
- contentString.append(randomcontent[j]).append(" ");
- for (int i = 0; i < 100; i++) {
- contentString.append(Long.toHexString(r.nextLong()))
- .append(" ");
- }
-
- InputStream contentStream = new ByteArrayInputStream(contentString
- .toString().getBytes());
- RemoteInputStreamServer contentRemoteStream = new SimpleRemoteInputStream(
- contentStream);
- attachmentsRemoteStream.put("content" + j, contentRemoteStream);
-
- }
-
- storageService.saveElement(null, xmlRemoteStream,
- attachmentsRemoteStream);
- storageService.commit();
- assertNotNull(storageService.getMetadata(null, id));
- for (int i = 0; i < randomcontent.length; i++) {
- assertTrue(storageService.findFullTextCount(null, randomcontent[i],
- false) > 0);
- }
- }
-
}
1
0
r693 - in trunk/simexplorer-is-security/src/java: META-INF fr/cemagref/simexplorer/is/security/dao fr/cemagref/simexplorer/is/security/entities
by glandais@users.labs.libre-entreprise.org 06 Feb '08
by glandais@users.labs.libre-entreprise.org 06 Feb '08
06 Feb '08
Author: glandais
Date: 2008-02-06 17:10:11 +0000 (Wed, 06 Feb 2008)
New Revision: 693
Modified:
trunk/simexplorer-is-security/src/java/META-INF/orm.xml
trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/dao/DaoSecurityImpl.java
trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/entities/Actor.java
Log:
User security
Modified: trunk/simexplorer-is-security/src/java/META-INF/orm.xml
===================================================================
--- trunk/simexplorer-is-security/src/java/META-INF/orm.xml 2008-02-06 17:09:53 UTC (rev 692)
+++ trunk/simexplorer-is-security/src/java/META-INF/orm.xml 2008-02-06 17:10:11 UTC (rev 693)
@@ -17,6 +17,7 @@
<id name="id">
<generated-value strategy="SEQUENCE" />
</id>
+ <basic name="visible"></basic>
<many-to-many name="groups" target-entity="Group"
fetch="EAGER">
<cascade>
Modified: trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/dao/DaoSecurityImpl.java
===================================================================
--- trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/dao/DaoSecurityImpl.java 2008-02-06 17:09:53 UTC (rev 692)
+++ trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/dao/DaoSecurityImpl.java 2008-02-06 17:10:11 UTC (rev 693)
@@ -86,9 +86,8 @@
*/
public void deleteGroup(Integer id) {
Group g = getGroup(id);
- if (g != null) {
- em.remove(g);
- }
+ g.setVisible(false);
+ em.merge(g);
}
/* (non-Javadoc)
@@ -96,9 +95,8 @@
*/
public void deleteUser(Integer id) {
User u = getUser(id);
- if (u != null) {
- em.remove(u);
- }
+ u.setVisible(false);
+ em.merge(u);
}
/* (non-Javadoc)
Modified: trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/entities/Actor.java
===================================================================
--- trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/entities/Actor.java 2008-02-06 17:09:53 UTC (rev 692)
+++ trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/entities/Actor.java 2008-02-06 17:10:11 UTC (rev 693)
@@ -36,6 +36,9 @@
/** The groups. */
private List<Group> groups;
+ /** The visible. */
+ private boolean visible;
+
/**
* Gets the id.
*
@@ -56,6 +59,25 @@
}
/**
+ * Checks if is visible.
+ *
+ * @return true, if is visible
+ */
+ public boolean isVisible() {
+ return visible;
+ }
+
+ /**
+ * Sets the visible.
+ *
+ * @param visible
+ * the new visible
+ */
+ public void setVisible(boolean visible) {
+ this.visible = visible;
+ }
+
+ /**
* Gets the groups.
*
* @return the groups
1
0
r692 - in trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is: attachment factories
by glandais@users.labs.libre-entreprise.org 06 Feb '08
by glandais@users.labs.libre-entreprise.org 06 Feb '08
06 Feb '08
Author: glandais
Date: 2008-02-06 17:09:53 +0000 (Wed, 06 Feb 2008)
New Revision: 692
Modified:
trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/attachment/Attachment.java
trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/factories/XmlConstants.java
Log:
Attachment handling
Modified: trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/attachment/Attachment.java
===================================================================
--- trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/attachment/Attachment.java 2008-02-06 16:39:44 UTC (rev 691)
+++ trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/attachment/Attachment.java 2008-02-06 17:09:53 UTC (rev 692)
@@ -120,4 +120,57 @@
return hexHash;
}
+ /* (non-Javadoc)
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result
+ + ((dataHash == null) ? 0 : dataHash.hashCode());
+ result = prime * result
+ + ((fileName == null) ? 0 : fileName.hashCode());
+ return result;
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ final Attachment other = (Attachment) obj;
+ if (dataHash == null) {
+ if (other.dataHash != null)
+ return false;
+ } else if (!dataHash.equals(other.dataHash))
+ return false;
+ if (fileName == null) {
+ if (other.fileName != null)
+ return false;
+ } else if (!fileName.equals(other.fileName))
+ return false;
+ return true;
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ StringBuffer sb = new StringBuffer();
+ sb.append(getFileName()).append(" - ");
+ sb.append(getDataHash());
+ if (getContentType() != null) {
+ sb.append(" - ").append(getContentType().getDescription());
+ }
+ return sb.toString();
+ }
+
}
Modified: trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/factories/XmlConstants.java
===================================================================
--- trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/factories/XmlConstants.java 2008-02-06 16:39:44 UTC (rev 691)
+++ trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/factories/XmlConstants.java 2008-02-06 17:09:53 UTC (rev 692)
@@ -24,9 +24,6 @@
*/
public interface XmlConstants {
- /** The Constant KEY_XML. */
- public static final String KEY_XML = "_xml";
-
/** The Constant DOT. */
public static final String DOT = ".";
1
0
r691 - trunk/simexplorer-is-swing/src/resources/i18n
by tchemit@users.labs.libre-entreprise.org 06 Feb '08
by tchemit@users.labs.libre-entreprise.org 06 Feb '08
06 Feb '08
Author: tchemit
Date: 2008-02-06 16:39:44 +0000 (Wed, 06 Feb 2008)
New Revision: 691
Modified:
trunk/simexplorer-is-swing/src/resources/i18n/simexplorer-is-swing-en_GB.properties
trunk/simexplorer-is-swing/src/resources/i18n/simexplorer-is-swing-fr_FR.properties
Log:
mise en placedes details
Modified: trunk/simexplorer-is-swing/src/resources/i18n/simexplorer-is-swing-en_GB.properties
===================================================================
--- trunk/simexplorer-is-swing/src/resources/i18n/simexplorer-is-swing-en_GB.properties 2008-02-06 16:39:17 UTC (rev 690)
+++ trunk/simexplorer-is-swing/src/resources/i18n/simexplorer-is-swing-en_GB.properties 2008-02-06 16:39:44 UTC (rev 691)
@@ -1,4 +1,4 @@
-#Mon Feb 04 19:11:17 GMT 2008
+#Wed Feb 06 16:33:27 GMT 2008
simexplorer.action.about=About
simexplorer.action.about.help=
simexplorer.action.about.tooltip=Show About dialog
@@ -31,6 +31,7 @@
simexplorer.action.application.search.tooltip=Launch search
simexplorer.action.application.searchText=search text \:
simexplorer.action.application.searchText.tooltip=Text to search in applications
+simexplorer.action.changeVersion.tooltip=Choose another version
simexplorer.action.closeTab=close
simexplorer.action.closeTab.help=
simexplorer.action.closeTab.tooltip=close the tab
@@ -108,10 +109,12 @@
simexplorer.common.cancel=cancel
simexplorer.common.creationDate=create date
simexplorer.common.description=description
+simexplorer.common.key=key
simexplorer.common.name=name
simexplorer.common.ok=ok
simexplorer.common.reset=reset
simexplorer.common.type=type
+simexplorer.common.value=value
simexplorer.common.version=version
simexplorer.config.i18n.menu=Language
simexplorer.config.main.autoConnect.description=Flag to auto connect to remote server at init time
@@ -145,8 +148,10 @@
simexplorer.node.components=Components
simexplorer.node.constants=Constants
simexplorer.node.constantvalues=Constants
+simexplorer.node.detail=Detail of ''{0}'' [{1}]
simexplorer.node.explorations=Exlorations
simexplorer.node.libraries=Librairies
+simexplorer.node.nodetail=No detail
simexplorer.node.structures=Structures
simexplorer.option.description.config=change value of configuration property (with **key**) by value **value**.
simexplorer.option.description.configFile=configuration's file
Modified: trunk/simexplorer-is-swing/src/resources/i18n/simexplorer-is-swing-fr_FR.properties
===================================================================
--- trunk/simexplorer-is-swing/src/resources/i18n/simexplorer-is-swing-fr_FR.properties 2008-02-06 16:39:17 UTC (rev 690)
+++ trunk/simexplorer-is-swing/src/resources/i18n/simexplorer-is-swing-fr_FR.properties 2008-02-06 16:39:44 UTC (rev 691)
@@ -1,4 +1,4 @@
-#Mon Feb 04 19:11:17 GMT 2008
+#Wed Feb 06 16:33:27 GMT 2008
simexplorer.action.about=A propos
simexplorer.action.about.help=
simexplorer.action.about.tooltip=Afficher les cr\u00E9dits
@@ -31,6 +31,7 @@
simexplorer.action.application.search.tooltip=Lancer la recherche
simexplorer.action.application.searchText=recherche \:
simexplorer.action.application.searchText.tooltip=Le texte de recherche
+simexplorer.action.changeVersion.tooltip=Choisir une autre version
simexplorer.action.closeTab=Fermer
simexplorer.action.closeTab.help=
simexplorer.action.closeTab.tooltip=Fermer l'onglet
@@ -108,10 +109,12 @@
simexplorer.common.cancel=annuler
simexplorer.common.creationDate=date de cr\u00E9ation
simexplorer.common.description=description
+simexplorer.common.key=nom descriptor
simexplorer.common.name=nom
simexplorer.common.ok=appliquer
simexplorer.common.reset=r\u00E9initialiser
simexplorer.common.type=type
+simexplorer.common.value=valeur
simexplorer.common.version=version
simexplorer.config.i18n.menu=Langue
simexplorer.config.main.autoConnect.description=Se connecter automatiquement au d\u00E9marrage
@@ -145,8 +148,10 @@
simexplorer.node.components=Composants
simexplorer.node.constants=Constantes
simexplorer.node.constantvalues=Constantes
+simexplorer.node.detail=D\u00E9tail de ''{0}'' [{1}]
simexplorer.node.explorations=Exlorations
simexplorer.node.libraries=Librairies
+simexplorer.node.nodetail=Pas de d\u00E9tail
simexplorer.node.structures=Structures
simexplorer.option.description.config=remplace la valeur d'une propri\u00E9t\u00E9 de clef **key** de la configuration par la valeur **value**.
simexplorer.option.description.configFile=le fichier de configuration utilis\u00E9
1
0
r690 - in trunk/simexplorer-is-swing/src: java/fr/cemagref/simexplorer/is/ui java/fr/cemagref/simexplorer/is/ui/swing java/fr/cemagref/simexplorer/is/ui/swing/actions java/fr/cemagref/simexplorer/is/ui/swing/actions/util java/fr/cemagref/simexplorer/is/ui/swing/model uimodel/fr/cemagref/simexplorer/is/ui/swing/tab
by tchemit@users.labs.libre-entreprise.org 06 Feb '08
by tchemit@users.labs.libre-entreprise.org 06 Feb '08
06 Feb '08
Author: tchemit
Date: 2008-02-06 16:39:17 +0000 (Wed, 06 Feb 2008)
New Revision: 690
Added:
trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/JDetailTableModel.java
Modified:
trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/StorageServiceHelper.java
trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SimExplorerUIRefreshHelper.java
trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/DeleteAction.java
trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ShowDetailTabAction.java
trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/ShowTabAbstractAction.java
trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/SimExplorerAbstractAction.java
trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/DetailTabModel.java
trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/JApplicationTableModel.java
trunk/simexplorer-is-swing/src/uimodel/fr/cemagref/simexplorer/is/ui/swing/tab/JApplicationDetailTab.jaxx
Log:
mise en place des d?\195?\169tails
Modified: trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/StorageServiceHelper.java
===================================================================
--- trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/StorageServiceHelper.java 2008-02-06 16:38:51 UTC (rev 689)
+++ trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/StorageServiceHelper.java 2008-02-06 16:39:17 UTC (rev 690)
@@ -20,6 +20,8 @@
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.service.SimExplorerServiceException;
import fr.cemagref.simexplorer.is.service.StorageService;
/**
@@ -53,6 +55,7 @@
return data;
}
+
public static LoggableElement getElement(SimExplorerContext context, boolean remote, String uuid, String version) throws Exception {
StorageService service = context.getStorageService(remote);
LoggableElement data;
@@ -60,4 +63,33 @@
return data;
}
+ public static Version[] getVersions(SimExplorerContext context, boolean remote, String uuid) {
+ StorageService service = context.getStorageService(remote);
+ MetaData[] data;
+ try {
+ data = service.getVersions(context.getToken(), uuid);
+ } catch (SimExplorerServiceException e) {
+ throw new SimExplorerRuntimeException(e);
+ }
+ if (data == null) {
+ return null;
+ }
+ Version[] result = new Version[data.length];
+ for (int i = 0; i < data.length; i++) {
+ MetaData metaData = data[i];
+ result[i] = metaData.getVersion();
+ }
+ return result;
+ }
+
+ public static MetaData getMetaData(SimExplorerContext context, boolean remote, String uuid, String version) {
+ try {
+ StorageService service = context.getStorageService(remote);
+ MetaData metas;
+ metas = service.getMetadata(context.getToken(), uuid, version);
+ return metas;
+ } catch (SimExplorerServiceException e1) {
+ throw new SimExplorerRuntimeException(e1);
+ }
+ }
}
Modified: trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SimExplorerUIRefreshHelper.java
===================================================================
--- trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SimExplorerUIRefreshHelper.java 2008-02-06 16:38:51 UTC (rev 689)
+++ trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/SimExplorerUIRefreshHelper.java 2008-02-06 16:39:17 UTC (rev 690)
@@ -18,14 +18,17 @@
* ##% */
package fr.cemagref.simexplorer.is.ui.swing;
+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.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.JDetailTableModel;
import fr.cemagref.simexplorer.is.ui.swing.model.ListTabModel;
+import fr.cemagref.simexplorer.is.ui.swing.model.LoggableElementTreeHelper;
import fr.cemagref.simexplorer.is.ui.swing.model.LoggableElementTreeNode;
import fr.cemagref.simexplorer.is.ui.swing.model.PaginationModel;
-import fr.cemagref.simexplorer.is.ui.swing.model.LoggableElementTreeHelper;
import fr.cemagref.simexplorer.is.ui.swing.tab.JApplicationDetailTab;
import fr.cemagref.simexplorer.is.ui.swing.tab.JApplicationListTab;
import org.codelutin.i18n.CountryEnum;
@@ -33,13 +36,16 @@
import org.codelutin.i18n.LanguageEnum;
import javax.swing.AbstractButton;
-import javax.swing.DefaultListModel;
+import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
-import javax.swing.JList;
import javax.swing.JTabbedPane;
-import javax.swing.JTree;
+import javax.swing.JTable;
import javax.swing.SwingUtilities;
+import javax.swing.tree.TreeNode;
+import javax.swing.tree.DefaultTreeModel;
+import java.text.SimpleDateFormat;
import java.util.regex.Matcher;
+import java.awt.Dimension;
/**
* Cette classe contient les méthodes utiles et réutilisables pour rafraichit
@@ -57,6 +63,8 @@
*/
public class SimExplorerUIRefreshHelper {
+ public static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss.SSS");
+
/**
* Rafraichit un onglet de type liste à partir de son modèle.
*
@@ -93,67 +101,6 @@
}
/**
- * Rafraichit l'onglet de détail à partir de notre modèle de détail.
- *
- * @param ui l'onglet de détail
- * @param model le modele de détail
- */
- public static void refreshDetailTabUI(final JApplicationDetailTab ui, final DetailTabModel model) {
-
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- JTree tree = ui.getNavigationTree();
-
- // tree data model may have changed, must revalidate
- tree.invalidate();
-
- JList historyList = ui.getHistoryList();
-
- DefaultListModel historyModel = (DefaultListModel) historyList.getModel();
-
- Version[] versions = model.getVersions();
- historyList.setSelectedIndex(-1);
- if (versions == null) {
- historyModel.setSize(0);
- } else {
- Version currentVersion = model.getSelectedNode().getMetaData().getVersion();
- historyModel.setSize(versions.length);
-
- for (int i = 0; i < versions.length; i++) {
- Version version = versions[i];
- historyModel.setElementAt(version, i);
- if (version.equals(currentVersion)) {
- historyList.setSelectedIndex(i);
- }
- }
- }
-
- // history list may have changed, must revalidate
- historyList.invalidate();
-
- // parent must be repaint (will revalidate layout for tree)
- ui.repaint();
- }
- });
- }
-
- /**
- * Rafraichit les actions d'un node dans l'arbre de navigation
- *
- * @param ui l'onglet de détail
- * @param model le model du détail
- * @param node le node sélectionné dans l'arbre de navigation
- */
- public static void refreshDetailActions(JApplicationDetailTab ui, DetailTabModel model, LoggableElementTreeNode node) {
- // refresh download button
- refreshDownloadAction(ui, model, node);
- // refresh delete button
- refreshDeleteAction(ui, model, node);
- // refresh export button
- refreshExportAction(ui, model, node);
- }
-
- /**
* Rafraichit les actions i18n dans le menu en fonction de la locale
* actuellement utilisée.
*
@@ -231,34 +178,49 @@
//});
}
- protected static void refreshExportAction(JApplicationDetailTab ui, DetailTabModel model, LoggableElementTreeNode node) {
- boolean export = LoggableElementTreeHelper.canExport(node);
- ui.getExportApplication().setEnabled(export);
- if (export) {
- ui.getExportApplication().setToolTipText(_("simexplorer.action.export2", node.getUserObject()));
- } else {
- ui.getExportApplication().setToolTipText(null);
+ /**
+ * Rafraichit les actions d'un node dans l'arbre de navigation
+ *
+ * @param ui l'onglet de détail
+ * @param node le node sélectionné dans l'arbre de navigation
+ */
+ public static void refreshDetailActions(JApplicationDetailTab ui, LoggableElementTreeNode node) {
+ // refresh download button
+ refreshDownloadAction(ui, node);
+ // refresh delete button
+ refreshDeleteAction(ui, node);
+ // refresh export button
+ refreshExportAction(ui, node);
+ }
+
+ protected static void refreshDownloadAction(JApplicationDetailTab ui, LoggableElementTreeNode node) {
+ boolean download = LoggableElementTreeHelper.canDownload(node);
+ ui.getDownload().setEnabled(download);
+ String tooltip = null;
+ if (download) {
+ tooltip = _("simexplorer.action.dowload2", node.getUserObject());
}
+ ui.getDownload().setToolTipText(tooltip);
}
- protected static void refreshDeleteAction(JApplicationDetailTab ui, DetailTabModel model, LoggableElementTreeNode node) {
+ protected static void refreshDeleteAction(JApplicationDetailTab ui, LoggableElementTreeNode node) {
boolean delete = LoggableElementTreeHelper.canDelete(node);
ui.getDelete().setEnabled(delete);
+ String tooltip = null;
if (delete) {
- ui.getDelete().setToolTipText(_("simexplorer.action.delete2", node.getUserObject()));
- } else {
- ui.getDelete().setToolTipText(null);
+ tooltip = _("simexplorer.action.delete2", node.getUserObject());
}
+ ui.getDelete().setToolTipText(tooltip);
}
- protected static void refreshDownloadAction(JApplicationDetailTab ui, DetailTabModel model, LoggableElementTreeNode node) {
- boolean download = LoggableElementTreeHelper.canDownload(node);
- ui.getDownload().setEnabled(download);
- if (download) {
- ui.getDownload().setToolTipText(_("simexplorer.action.dowload2", node.getUserObject()));
- } else {
- ui.getDownload().setToolTipText(null);
+ protected static void refreshExportAction(JApplicationDetailTab ui, LoggableElementTreeNode node) {
+ boolean export = LoggableElementTreeHelper.canExport(node);
+ ui.getExportApplication().setEnabled(export);
+ String tooltip = null;
+ if (export) {
+ tooltip = _("simexplorer.action.export2", node.getUserObject());
}
+ ui.getExportApplication().setToolTipText(tooltip);
}
protected static void refreshPagination(JApplicationListTab ui, PaginationModel pagination) {
@@ -291,7 +253,7 @@
while (size > combo.getItemCount()) {
combo.addItem(combo.getItemCount());
}
- }
+ }
//System.out.println("new page size : " + combo.getItemCount());
combo.setSelectedIndex(model.getPagination().getCurrentPage());
@@ -300,6 +262,65 @@
ui.getCurrentPage().setEnabled(b);
}
+ public static void resetHistory(JApplicationDetailTab ui, DetailTabModel model, DefaultComboBoxModel historyModel) {
+ historyModel.removeAllElements();
+ LoggableElement selectedNode = model.getSelectedNode();
+ Version[] versions = model.getVersions();
+ boolean nodetail = versions == null || selectedNode == null;
+ // and the selection
+ if (nodetail) {
+ resetDetail(ui);
+ } else {
+ for (Version version : versions) {
+ historyModel.addElement(version);
+ }
+ boolean enabled = ui.getDetailVersions().getItemCount() > 1;
+ ui.getDetailVersions().setEnabled(enabled);
+ String text;
+ if (enabled) {
+ text = _("simexplorer.action.changeVersion.tooltip");
+ } else {
+ text = null;
+ }
+ ui.getDetailVersions().setToolTipText(text);
+ }
+ }
+
+ public static void resetDetail(final JApplicationDetailTab ui) {
+ ui.getDetailHeader().setText(_("simexplorer.node.nodetail"));
+ ui.getDetail().setVisible(false);
+ ((JDetailTableModel) ui.getDetailTable().getModel()).setData(null);
+ }
+
+ public static void updateDetail(Integer index, final JApplicationDetailTab ui, DetailTabModel model, LoggableElement selectedNode) {
+ MetaData detail = model.getDetail();
+ ui.getDetailVersions().setSelectedIndex(index);
+ ui.getDetailHeader().setText(_("simexplorer.node.detail", selectedNode.getMetaData().getName(), model.getSelectedVersion()));
+ ui.getDetailType().setText(detail.getType());
+ ui.getDetailDescription().setText(detail.getDescription());
+ ui.getDetailCreationDate().setText(DATE_FORMAT.format(detail.getCreationDate()));
+ ui.getDetail().setVisible(true);
+ JTable table = ui.getDetailTable();
+ ((JDetailTableModel) table.getModel()).setData(detail);
+ int nbRows = table.getRowCount()+1;
+ if (nbRows>20) {
+ nbRows=20;
+ }
+ ui.getScrollTable().setPreferredSize(new Dimension((int) table.getSize().getWidth(),2+(nbRows*(4+table.getFont().getSize()))));
+ table.invalidate();
+ ui.getScrollPane().repaint();
+ ui.repaint();
+ }
+
+ public static void updateNavigationTree(JApplicationDetailTab ui, DetailTabModel model) {
+ // create navigation tree
+ TreeNode root = LoggableElementTreeHelper.buildLoggableElementNode(model.getRootNode());
+ // push it in tree model
+ ((DefaultTreeModel) ui.getNavigationTree().getModel()).setRoot(root);
+ // by default select the root node
+ ui.getNavigationTree().setSelectionRow(0);
+ }
+
protected SimExplorerUIRefreshHelper() {
// do not instanciate me please
}
Modified: trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/DeleteAction.java
===================================================================
--- trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/DeleteAction.java 2008-02-06 16:38:51 UTC (rev 689)
+++ trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/DeleteAction.java 2008-02-06 16:39:17 UTC (rev 690)
@@ -82,8 +82,6 @@
@Override
protected void doAction(ActionEvent e) throws Exception {
super.doAction(e);
- //StorageService service = getContext().getStorageService(((DetailTabModel) getModel()).isRemote());
- //TODO
}
@Override
Modified: trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ShowDetailTabAction.java
===================================================================
--- trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ShowDetailTabAction.java 2008-02-06 16:38:51 UTC (rev 689)
+++ trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/ShowDetailTabAction.java 2008-02-06 16:39:17 UTC (rev 690)
@@ -20,28 +20,28 @@
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.service.SimExplorerServiceException;
-import fr.cemagref.simexplorer.is.service.StorageService;
-import fr.cemagref.simexplorer.is.ui.SimExplorerRuntimeException;
+import fr.cemagref.simexplorer.is.ui.StorageServiceHelper;
import fr.cemagref.simexplorer.is.ui.swing.SimExplorerUIRefreshHelper;
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.LoggableElementTreeHelper;
import fr.cemagref.simexplorer.is.ui.swing.model.LoggableElementTreeNode;
import fr.cemagref.simexplorer.is.ui.swing.tab.JApplicationDetailTab;
-import javax.swing.JTree;
-import javax.swing.ListModel;
-import javax.swing.event.ListSelectionEvent;
-import javax.swing.event.ListSelectionListener;
+import javax.swing.DefaultComboBoxModel;
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.ItemEvent;
+import java.awt.event.ItemListener;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
/**
- * Action pour afficher le tab de détail d'un LoggableElement
+ * Action pour afficher le tab de détail d'un LoggableElement.
+ * <p/>
+ * Les deux listeners (sur l'arbre de navigation et sur la liste des versions)
+ * écoutent les changements provenant du model de détail afin
+ * de pouvoir optimiser les rafraichissement d'ui.
*
* @author chemit
*/
@@ -58,104 +58,177 @@
private static final long serialVersionUID = 6643631041114311643L;
+ NavigationSelectionListener navigationListener;
+
+ VersionSelectionListener versionListener;
+
public ShowDetailTabAction(String name) {
super(name);
+ navigationListener = new NavigationSelectionListener();
+ versionListener = new VersionSelectionListener();
}
protected void initFirstUsage(final JApplicationDetailTab ui, final DetailTabModel model) {
-
// add a listener on navigation tree
- ui.getNavigationTree().addTreeSelectionListener(new TreeSelectionListener() {
- public void valueChanged(TreeSelectionEvent e) {
- TreePath path = e.getNewLeadSelectionPath();
- LoggableElementTreeNode node = null;
- if (path != null) {
- node = (LoggableElementTreeNode) path.getLastPathComponent();
- }
- StorageService service = getContext().getStorageService(model.isRemote());
- String token = getContext().getToken();
+ ui.getNavigationTree().addTreeSelectionListener(navigationListener);
+ // add a listener on version list
+ ui.getDetailVersions().addItemListener(versionListener);
+ }
- // update actions
- SimExplorerUIRefreshHelper.refreshDetailActions(ui, model, node);
+ protected void initUI(JApplicationDetailTab ui, DetailTabModel model) {
+ SimExplorerUIRefreshHelper.updateNavigationTree(ui, model);
+ }
- Object o = node == null ? null : node.getUserObject();
- // le node est acceptable uniquement si c'est un loggableElement
- model.setSelectedNode((LoggableElement) (o instanceof LoggableElement ? o : null));
+ /**
+ * The listener of the selection in navigation tree.
+ *
+ * @author chemit
+ */
+ protected class NavigationSelectionListener implements TreeSelectionListener, PropertyChangeListener {
- // update detail panel
- //updateDetail(ui, model, node, service, token);
+ public NavigationSelectionListener() {
+ // only listen on SELECTED_VERSION_INDEX_PROPERTY_CHANGED
+ // to rebuild detail panel
+ getTabModel().addPropertyChangeListener(DetailTabModel.Properties.SELECTED_NODE_PROPERTY_CHANGED, this);
+ }
- // update history list
- updateHistoryList(ui, model, node, service, token);
+ public void valueChanged(TreeSelectionEvent e) {
+ JApplicationDetailTab ui = getTabUI();
+ DetailTabModel model = getTabModel();
- // refresh ui
- SimExplorerUIRefreshHelper.refreshDetailTabUI(ui, model);
+ TreePath path = e.getNewLeadSelectionPath();
+ LoggableElementTreeNode node = null;
+ if (path != null) {
+ node = (LoggableElementTreeNode) path.getLastPathComponent();
}
- });
+ 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
+ // class (in method propertyChange).
+ // The VersionListener will deal only with a real version selection.
+ model.resetSelectedVersion();
- // add a listener on history list
- ui.getHistoryList().addListSelectionListener(new ListSelectionListener() {
- public void valueChanged(ListSelectionEvent e) {
- int index = e.getLastIndex();
- //int lastIndex = e.getLastIndex();
- log.info("last index : " + index);
- ListModel listModel = ui.getHistoryList().getModel();
- if (index > -1 && listModel.getSize() > index && ui.getHistoryList().getSelectedIndex() != index) {
- Object selectedVersion = listModel.getElementAt(index);
- log.info("selected version " + selectedVersion);
- //TODO load details for this version
- }
+ // update history list
+ LoggableElement element = node == null || !(node.getUserObject() instanceof LoggableElement) ? null : ((LoggableElement) node.getUserObject());
+ boolean history = element != null;
+ Version selectedVersion;
+ Version[] versions;
+ if (!history) {
+ versions = null;
+ selectedVersion = null;
+ } else {
+ versions = StorageServiceHelper.getVersions(getContext(), model.isRemote(), element.getMetaData().getUuid());
+ selectedVersion = element.getMetaData().getVersion();
}
- });
- }
- protected void initUI(JApplicationDetailTab ui, DetailTabModel model) {
- // création de l'arbre de navigation
- TreeNode root = LoggableElementTreeHelper.buildLoggableElementNode(model.getRootNode());
- // push tree model
- JTree tree = ui.getNavigationTree();
- DefaultTreeModel modelTree = (DefaultTreeModel) tree.getModel();
- modelTree.setRoot(root);
- // by default select the root node (to display info about the exploration)
- tree.setSelectionRow(0);
- // refresh ui
- SimExplorerUIRefreshHelper.refreshDetailTabUI(ui, model);
- }
+ model.setVersions(versions);
+ model.setDetail(element == null ? null : element.getMetaData());
- public static void updateDetail(JApplicationDetailTab ui, DetailTabModel model, LoggableElementTreeNode node, StorageService service, String token) {
- boolean detail = LoggableElementTreeHelper.isLoggableElement(node);
- String text;
- if (detail) {
- LoggableElement element = (LoggableElement) node.getUserObject();
- model.setSelectedNode(element);
- text = "detail [" + node.getUserObject().getClass().getSimpleName() + "]" + element;
- } else {
- text = "No detail";
+ // le node est acceptable uniquement si c'est un loggableElement
+ model.setSelectedNode((LoggableElement) (o instanceof LoggableElement ? o : null));
+
+ // on positionne la version selectionnee
+ model.setSelectedVersion(selectedVersion);
+
+ // update actions on selected node
+ SimExplorerUIRefreshHelper.refreshDetailActions(ui, node);
}
- ui.getDetailFake().setText(text);
+
+ /**
+ * Notify a modification in the model.
+ * <p/>
+ * This method will update ui.
+ *
+ * @param evt event coming from DetailTabModel
+ */
+ public void propertyChange(PropertyChangeEvent evt) {
+ log.info(evt.getPropertyName() + " old:" + evt.getOldValue() + ", new:" + evt.getNewValue());
+ JApplicationDetailTab ui = getTabUI();
+ DetailTabModel model = getTabModel();
+ DefaultComboBoxModel historyModel = (DefaultComboBoxModel) ui.getDetailVersions().getModel();
+
+ boolean wasEnable = versionListener.isEnabled();
+ // disable version listener on selection (we already have updated model)
+ versionListener.setEnabled(false);
+ // refresh ui
+ SimExplorerUIRefreshHelper.resetHistory(ui, model, historyModel);
+ // push back previous state of version listener
+ versionListener.setEnabled(wasEnable);
+ }
+
}
- public static void updateHistoryList(JApplicationDetailTab ui, DetailTabModel model, LoggableElementTreeNode node, StorageService service, String token) {
- //boolean history = LoggableElementTreeHelper.isLoggableElement(node);
- LoggableElement element = model.getSelectedNode();
- boolean history = element != null;
- if (!history) {
- model.setVersions(null);
- model.setSelectedVersion(null);
- return;
+ private class VersionSelectionListener implements PropertyChangeListener, ItemListener {
+
+ protected boolean enabled;
+
+ public VersionSelectionListener() {
+ enabled = true;
+ getTabModel().addPropertyChangeListener(DetailTabModel.Properties.SELECTED_VERSION_INDEX_PROPERTY_CHANGED, this);
}
- //LoggableElement element = (LoggableElement) node.getUserObject();
- try {
- MetaData[] metas = service.getVersions(token, element.getMetaData().getUuid());
- Version[] versions = new Version[metas.length];
- for (int i = 0; i < metas.length; i++) {
- MetaData meta = metas[i];
- versions[i] = meta.getVersion();
+
+ public void itemStateChanged(ItemEvent e) {
+ if (!isEnabled()) {
+ return;
}
- model.setVersions(versions);
- model.setSelectedVersion(element.getMetaData().getVersion());
- } catch (SimExplorerServiceException e) {
- throw new SimExplorerRuntimeException(e);
+ JApplicationDetailTab ui = getTabUI();
+ DetailTabModel model = getTabModel();
+
+ MetaData metas;
+ //int selectedVersionIndex = ui.getDetailVersions().getSelectedIndex();
+ Object selectedItem = ui.getDetailVersions().getSelectedItem();
+ if (selectedItem == null) {
+ throw new NullPointerException("can not have a selectedItem null");
+ }
+ Version selectedVersion = Version.valueOf(selectedItem.toString());
+ log.info("selected version (" + selectedVersion+ ") " + selectedItem);
+ metas = StorageServiceHelper.getMetaData(
+ getContext(),
+ model.isRemote(),
+ model.getSelectedNode().getMetaData().getUuid(),
+ selectedVersion.toString()
+ );
+ model.setDetail(metas);
+
+ // finally change selectedIndex
+ model.setSelectedVersion(selectedVersion);
}
+
+ /**
+ * When the model modifies his data, ui must be updated.
+ * <p/>
+ * Note : <b>Only used when the selectedVersion is not null.</b>
+ *
+ * @param evt property changed event
+ */
+ public void propertyChange(PropertyChangeEvent evt) {
+ log.info(evt.getPropertyName() + " old:" + evt.getOldValue() + ", new:" + evt.getNewValue());
+ Integer index = (Integer) evt.getNewValue();
+ JApplicationDetailTab ui = getTabUI();
+ DetailTabModel model = getTabModel();
+ LoggableElement selectedNode = model.getSelectedNode();
+ boolean wasEnable = isEnabled();
+ // disable this listener, while updating list model, it will
+ // change the selection, and we don't want the model to be updated
+ // again
+ setEnabled(false);
+ if (index == null || index == -1) {
+ SimExplorerUIRefreshHelper.resetDetail(ui);
+ } else {
+ SimExplorerUIRefreshHelper.updateDetail(index, ui, model, selectedNode);
+ }
+ setEnabled(wasEnable);
+ }
+
+ public boolean isEnabled() {
+ return enabled;
+ }
+
+ public void setEnabled(boolean enabled) {
+ this.enabled = enabled;
+ }
+
}
+
}
Modified: trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/ShowTabAbstractAction.java
===================================================================
--- trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/ShowTabAbstractAction.java 2008-02-06 16:38:51 UTC (rev 689)
+++ trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/ShowTabAbstractAction.java 2008-02-06 16:39:17 UTC (rev 690)
@@ -66,7 +66,7 @@
if (firstTime) {
initFirstUsage(ui, model);
}
- initUI(ui,model);
+ initUI(ui, model);
}
Modified: trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/SimExplorerAbstractAction.java
===================================================================
--- trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/SimExplorerAbstractAction.java 2008-02-06 16:38:51 UTC (rev 689)
+++ trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/actions/util/SimExplorerAbstractAction.java 2008-02-06 16:39:17 UTC (rev 690)
@@ -104,4 +104,10 @@
}
return (JComponent) container.getObjectById(name);
}
+
+ protected String getToken() {
+ String token;
+ token = getContext().getToken();
+ return token;
+ }
}
Modified: trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/DetailTabModel.java
===================================================================
--- trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/DetailTabModel.java 2008-02-06 16:38:51 UTC (rev 689)
+++ trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/DetailTabModel.java 2008-02-06 16:39:17 UTC (rev 690)
@@ -1,5 +1,5 @@
/*
-* \#\#% Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Code Lutin,
+* ##% 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
@@ -15,7 +15,7 @@
* 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.LoggableElement;
@@ -23,9 +23,16 @@
import fr.cemagref.simexplorer.is.entities.metadata.Version;
import fr.cemagref.simexplorer.is.ui.swing.SimExplorerTab;
import jaxx.runtime.builder.TabModel;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+
/**
- * Le model pour un Tab contenant le détail d'une application
+ * Le model pour un Tab contenant le détail d'une application.
+ * <p/>
+ * TODO
*
* @author chemit
*/
@@ -33,8 +40,15 @@
/** ? */
protected SimExplorerTab tab;
+ public enum Properties {
+ SELECTED_NODE_PROPERTY_CHANGED,
+ SELECTED_VERSION_INDEX_PROPERTY_CHANGED
+ }
+
private static final long serialVersionUID = 4851121531481734868L;
+ static protected Log log = LogFactory.getLog(DetailTabModel.class);
+
/** flag pour savoir si on est dans le cas local ou remote */
protected boolean remote;
@@ -43,7 +57,7 @@
/**
* le LoggableElement sélectionné dans l'arbre de navigation (ou null
- * si le node sélectioné n'est pas un LoggableElement)
+ * si le node sélectionné n'est pas un LoggableElement)
*/
protected LoggableElement selectedNode;
@@ -55,10 +69,10 @@
protected Version[] versions;
/**
- * la version sélectionnée dans la liste des versions (ou null si la liste
- * des versions est nulle)
+ * l'index de la version sélectionnée dans la liste des versions (ou null
+ * si la liste des versions est nulle)
*/
- protected Version selectedVersion;
+ protected Integer selectedVersionIndex;
/**
* les métas à afficher dans le panel de détaillié à un uuid et à une version
@@ -84,9 +98,13 @@
}
public Version getSelectedVersion() {
- return selectedVersion;
+ return versions == null || selectedVersionIndex == null || selectedVersionIndex == -1 ? null : versions[selectedVersionIndex];
}
+ public Version getSelectedVersion(int integer) {
+ return versions == null ? null : versions[integer];
+ }
+
public Version[] getVersions() {
return versions;
}
@@ -108,13 +126,31 @@
}
public void setSelectedNode(LoggableElement selectedNode) {
+ LoggableElement oldSelectedNode = this.selectedNode;
this.selectedNode = selectedNode;
+ // ui must build a list of versions for this node (if not null)
+ firePropertyChange(Properties.SELECTED_NODE_PROPERTY_CHANGED, oldSelectedNode, selectedNode);
}
- public void setSelectedVersion(Version selectedVersion) {
- this.selectedVersion = selectedVersion;
+ public void setSelectedVersion(Version version) {
+ Integer index = getVersionIndex(version);
+ Integer oldSelectedVersionIndex = this.selectedVersionIndex;
+ this.selectedVersionIndex = index;
+ firePropertyChange(Properties.SELECTED_VERSION_INDEX_PROPERTY_CHANGED, oldSelectedVersionIndex, selectedVersionIndex);
}
+ protected Integer getVersionIndex(Version version) {
+ if (versions != null && version != null) {
+ for (int i = 0; i < versions.length; i++) {
+ Version version1 = versions[i];
+ if (version1.equals(version)) {
+ return i;
+ }
+ }
+ }
+ return null;
+ }
+
public void setVersions(Version[] versions) {
this.versions = versions;
}
@@ -125,9 +161,62 @@
public void reset() {
rootNode = null;
+ resetSelectedNode();
+ }
+
+ public void resetSelectedNode() {
selectedNode = null;
versions = null;
- selectedVersion = null;
- detail=null;
+ resetSelectedVersion();
+ detail = null;
}
+
+ public void resetSelectedVersion() {
+ selectedVersionIndex = null;
+ }
+
+ protected PropertyChangeSupport changeSupport;
+
+ public synchronized void addPropertyChangeListener(Properties propertyName, PropertyChangeListener listener) {
+ if (listener == null) {
+ return;
+ }
+ if (changeSupport == null) {
+ changeSupport = new PropertyChangeSupport(this);
+ }
+ changeSupport.addPropertyChangeListener(propertyName.name(), 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 PropertyChangeListener[] getPropertyChangeListeners() {
+ if (changeSupport == null) {
+ return new PropertyChangeListener[0];
+ }
+ return changeSupport.getPropertyChangeListeners();
+ }
+
+ public void firePropertyChange(Properties propertyName, Object oldValue, Object newValue) {
+ if (changeSupport == null || (oldValue == null && newValue == null) ||
+ (oldValue != null && oldValue.equals(newValue))) {
+ return;
+ }
+ changeSupport.firePropertyChange(propertyName.name(), oldValue, newValue);
+ }
+
}
\ No newline at end of file
Modified: trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/JApplicationTableModel.java
===================================================================
--- trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/JApplicationTableModel.java 2008-02-06 16:38:51 UTC (rev 689)
+++ trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/JApplicationTableModel.java 2008-02-06 16:39:17 UTC (rev 690)
@@ -1,5 +1,5 @@
/*
-* \#\#% Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Code Lutin,
+* ##% Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Code Lutin,
* Tony Chemit
*
* This program is free software; you can redistribute it and/or
@@ -15,7 +15,7 @@
* 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.metadata.MetaData;
Added: trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/JDetailTableModel.java
===================================================================
--- trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/JDetailTableModel.java (rev 0)
+++ trunk/simexplorer-is-swing/src/java/fr/cemagref/simexplorer/is/ui/swing/model/JDetailTableModel.java 2008-02-06 16:39:17 UTC (rev 690)
@@ -0,0 +1,94 @@
+/*
+* ##% Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Code Lutin,
+* Tony Chemit
+*
+* 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.metadata.MetaData;
+import static org.codelutin.i18n.I18n._;
+import static org.codelutin.i18n.I18n.n_;
+
+import javax.swing.table.AbstractTableModel;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Table model to contains a MetaData details
+ *
+ * @author chemit
+ */
+public class JDetailTableModel extends AbstractTableModel {
+
+ protected MetaData data;
+ protected List<String> descriptors;
+ private static final long serialVersionUID = -2377632046940030206L;
+
+ protected final String[] columnNames = {
+ n_("simexplorer.common.key"),
+ n_("simexplorer.common.value")
+ };
+
+ public JDetailTableModel() {
+ }
+
+ public int getRowCount() {
+ return getDescriptors().size();
+ }
+
+ public int getColumnCount() {
+ return columnNames.length;
+ }
+
+ public Object getValueAt(int rowIndex, int columnIndex) {
+ Object result = null;
+ if (data == null) {
+ return null;
+ }
+ if (columnIndex == 0) {
+ // key
+ result = getDescriptors().get(rowIndex);
+ } else if (columnIndex == 1) {
+ // value
+ String propertyDescriptor = getDescriptors().get(rowIndex);
+ result = data.getDescriptors().get(propertyDescriptor);
+ }
+ return result;
+ }
+
+ @Override
+ public String getColumnName(int column) {
+ return _(columnNames[column]);
+ }
+
+ public List<String> getDescriptors() {
+ if (descriptors == null) {
+ descriptors = new ArrayList<String>();
+ }
+ return descriptors;
+ }
+
+ public void setData(MetaData data) {
+ this.data = data;
+ getDescriptors().clear();
+ if (data != null) {
+ getDescriptors().addAll(data.getDescriptors().keySet());
+ Collections.sort(getDescriptors());
+ }
+ }
+
+}
\ No newline at end of file
Modified: trunk/simexplorer-is-swing/src/uimodel/fr/cemagref/simexplorer/is/ui/swing/tab/JApplicationDetailTab.jaxx
===================================================================
--- trunk/simexplorer-is-swing/src/uimodel/fr/cemagref/simexplorer/is/ui/swing/tab/JApplicationDetailTab.jaxx 2008-02-06 16:38:51 UTC (rev 689)
+++ trunk/simexplorer-is-swing/src/uimodel/fr/cemagref/simexplorer/is/ui/swing/tab/JApplicationDetailTab.jaxx 2008-02-06 16:39:17 UTC (rev 690)
@@ -1,4 +1,7 @@
-<Table>
+<Table>
+ <script>
+ import static org.codelutin.i18n.I18n._;
+ </script>
<row>
<cell fill='vertical'>
<JToolBar id='toolbar' floatable='false' opaque='false'
@@ -11,25 +14,70 @@
</JToolBar>
</cell>
</row>
+ <row>
+ <cell fill='vertical'>
+ <!--JPanel border='{javax.swing.border.LineBorder.createBlackLineBorder()}'-->
+ <JPanel id='detailHeaderPanel' background='{Color.WHITE}' border='{javax.swing.border.LineBorder.createBlackLineBorder()}'>
+ <JLabel id='detailHeader' text='{_("simexplorer.node.nodetail")}'/>
+ </JPanel>
+ </cell>
+ </row>
<row fill="both" weightx="1" weighty="1">
<cell>
<JSplitPane id='splitOne' orientation="horizontal" resizeWeight="0.4" oneTouchExpandable='true'>
<JScrollPane columnHeaderView='{toolbar}'>
<JTree id="navigationTree" model='{new javax.swing.tree.DefaultTreeModel(null)}'/>
</JScrollPane>
- <JScrollPane id="scrollPane">
- <JSplitPane id='splitTwo' orientation="vertical" resizeWeight="0.6" oneTouchExpandable='true'>
- <JScrollPane horizontalScrollBarPolicy="horizontal_scrollbar_never">
- <JPanel id="detail">
- <JLabel id='detailFake' text="DetailPanel"/>
- </JPanel>
- </JScrollPane>
- <JScrollPane horizontalScrollBarPolicy="horizontal_scrollbar_never">
- <!--JPanel id="history"-->
- <JList id='historyList' model='{new DefaultListModel()}'/>
- <!--/JPanel-->
- </JScrollPane>
- </JSplitPane>
+ <JScrollPane id="scrollPane" columnHeaderView='{detailHeaderPanel}'>
+ <!--JScrollPane id="scrollPane" verticalScrollBarPolicy="vertical_scrollbar_never" columnHeaderView='{detailHeaderPanel}'-->
+ <Table id='detail' insets='2,2,2,1'>
+ <row fill='vertical'>
+ <cell anchor='west'>
+ <JLabel text='{_("simexplorer.common.type")}'/>
+ </cell>
+ <cell weightx="1" anchor='east'>
+ <JLabel id='detailType'/>
+ </cell>
+ </row>
+ <row>
+ <cell anchor='west'>
+ <JLabel text='{_("simexplorer.common.version")}'/>
+ </cell>
+ <cell weightx="1" anchor='east'>
+ <JComboBox id='detailVersions' model='{new DefaultComboBoxModel()}'/>
+ </cell>
+ </row>
+ <row fill='vertical'>
+ <cell anchor='west'>
+ <JLabel text='{_("simexplorer.common.description")}'/>
+ </cell>
+ <cell weightx="1" anchor='east'>
+ <JLabel id='detailDescription'/>
+ </cell>
+ </row>
+ <row fill='vertical'>
+ <cell anchor='west'>
+ <JLabel text='{_("simexplorer.common.creationDate")}'/>
+ </cell>
+ <cell anchor='east'>
+ <JLabel id='detailCreationDate'/>
+ </cell>
+ </row>
+ <row>
+ <cell columns='2' fill='horizontal'>
+ <JScrollPane id='scrollTable'>
+ <JTable id="detailTable" model='{new fr.cemagref.simexplorer.is.ui.swing.model.JDetailTableModel()}' focusable='false' enabled='false'/>
+ </JScrollPane>
+ </cell>
+ </row>
+ <row weighty="1" weightx="2" >
+ <cell fill='both' columns='2'>
+ <JPanel>
+ <JLabel text=''/>
+ </JPanel>
+ </cell>
+ </row>
+ </Table>
</JScrollPane>
</JSplitPane>
</cell>
1
0
r689 - trunk/simexplorer-is-swing/src/uimodel/fr/cemagref/simexplorer/is/ui/swing
by tchemit@users.labs.libre-entreprise.org 06 Feb '08
by tchemit@users.labs.libre-entreprise.org 06 Feb '08
06 Feb '08
Author: tchemit
Date: 2008-02-06 16:38:51 +0000 (Wed, 06 Feb 2008)
New Revision: 689
Modified:
trunk/simexplorer-is-swing/src/uimodel/fr/cemagref/simexplorer/is/ui/swing/SimExplorerUI.jaxx
Log:
pas de focusPainted sur les toggle buttons
Modified: trunk/simexplorer-is-swing/src/uimodel/fr/cemagref/simexplorer/is/ui/swing/SimExplorerUI.jaxx
===================================================================
--- trunk/simexplorer-is-swing/src/uimodel/fr/cemagref/simexplorer/is/ui/swing/SimExplorerUI.jaxx 2008-02-06 16:38:29 UTC (rev 688)
+++ trunk/simexplorer-is-swing/src/uimodel/fr/cemagref/simexplorer/is/ui/swing/SimExplorerUI.jaxx 2008-02-06 16:38:51 UTC (rev 689)
@@ -41,9 +41,9 @@
<JToolBar id="toolbar" floatable='false' margin='0,0,0,0'
opaque='true'
borderPainted='true'>
- <jaxx.runtime.swing.JAXXToggleButton id='toggleTab_local' enabled='false'/>
- <jaxx.runtime.swing.JAXXToggleButton id='toggleTab_remote' enabled='false'/>
- <jaxx.runtime.swing.JAXXToggleButton id='toggleTab_synchronize' enabled='false'/>
+ <jaxx.runtime.swing.JAXXToggleButton id='toggleTab_local' enabled='false' focusPainted='false'/>
+ <jaxx.runtime.swing.JAXXToggleButton id='toggleTab_remote' enabled='false' focusPainted='false'/>
+ <jaxx.runtime.swing.JAXXToggleButton id='toggleTab_synchronize' enabled='false' focusPainted='false'/>
</JToolBar>
</cell>
</row>
1
0
r688 - trunk/simexplorer-is-swing/src/uimodel/fr/cemagref/simexplorer/is/ui/swing/panel
by tchemit@users.labs.libre-entreprise.org 06 Feb '08
by tchemit@users.labs.libre-entreprise.org 06 Feb '08
06 Feb '08
Author: tchemit
Date: 2008-02-06 16:38:29 +0000 (Wed, 06 Feb 2008)
New Revision: 688
Removed:
trunk/simexplorer-is-swing/src/uimodel/fr/cemagref/simexplorer/is/ui/swing/panel/JApplicationDetailPanel.jaxx
trunk/simexplorer-is-swing/src/uimodel/fr/cemagref/simexplorer/is/ui/swing/panel/JApplicationHistoryPanel.jaxx
trunk/simexplorer-is-swing/src/uimodel/fr/cemagref/simexplorer/is/ui/swing/panel/JApplicationTreePanel.jaxx
Log:
ui non utilisees
Deleted: trunk/simexplorer-is-swing/src/uimodel/fr/cemagref/simexplorer/is/ui/swing/panel/JApplicationDetailPanel.jaxx
===================================================================
--- trunk/simexplorer-is-swing/src/uimodel/fr/cemagref/simexplorer/is/ui/swing/panel/JApplicationDetailPanel.jaxx 2008-02-06 10:44:22 UTC (rev 687)
+++ trunk/simexplorer-is-swing/src/uimodel/fr/cemagref/simexplorer/is/ui/swing/panel/JApplicationDetailPanel.jaxx 2008-02-06 16:38:29 UTC (rev 688)
@@ -1,6 +0,0 @@
-<JPanel>
- <script>
- import static org.codelutin.i18n.I18n._;
- </script>
- <JLabel text="DetailPanel"/>
-</JPanel>
\ No newline at end of file
Deleted: trunk/simexplorer-is-swing/src/uimodel/fr/cemagref/simexplorer/is/ui/swing/panel/JApplicationHistoryPanel.jaxx
===================================================================
--- trunk/simexplorer-is-swing/src/uimodel/fr/cemagref/simexplorer/is/ui/swing/panel/JApplicationHistoryPanel.jaxx 2008-02-06 10:44:22 UTC (rev 687)
+++ trunk/simexplorer-is-swing/src/uimodel/fr/cemagref/simexplorer/is/ui/swing/panel/JApplicationHistoryPanel.jaxx 2008-02-06 16:38:29 UTC (rev 688)
@@ -1,6 +0,0 @@
-<JPanel>
- <script>
- import static org.codelutin.i18n.I18n._;
- </script>
- <JLabel text="HistoryPanel"/>
-</JPanel>
\ No newline at end of file
Deleted: trunk/simexplorer-is-swing/src/uimodel/fr/cemagref/simexplorer/is/ui/swing/panel/JApplicationTreePanel.jaxx
===================================================================
--- trunk/simexplorer-is-swing/src/uimodel/fr/cemagref/simexplorer/is/ui/swing/panel/JApplicationTreePanel.jaxx 2008-02-06 10:44:22 UTC (rev 687)
+++ trunk/simexplorer-is-swing/src/uimodel/fr/cemagref/simexplorer/is/ui/swing/panel/JApplicationTreePanel.jaxx 2008-02-06 16:38:29 UTC (rev 688)
@@ -1,7 +0,0 @@
-<JPanel>
- <script>
- import static org.codelutin.i18n.I18n._;
- </script>
- <JLabel text="TreePanel"/>
-</JPanel>
-
\ No newline at end of file
1
0
r687 - in trunk: simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/attachment simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service simexplorer-is-service/src/test/fr/cemagref/simexplorer/is/service simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages
by glandais@users.labs.libre-entreprise.org 06 Feb '08
by glandais@users.labs.libre-entreprise.org 06 Feb '08
06 Feb '08
Author: glandais
Date: 2008-02-06 10:44:22 +0000 (Wed, 06 Feb 2008)
New Revision: 687
Modified:
trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/attachment/Attachment.java
trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/ElementGenerator.java
trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java
trunk/simexplorer-is-service/src/test/fr/cemagref/simexplorer/is/service/StorageServiceMassInsert.java
trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/FileSystemAttachmentHandler.java
trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/Install.java
Log:
Hash bug fix
Modified: trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/attachment/Attachment.java
===================================================================
--- trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/attachment/Attachment.java 2008-02-05 15:53:04 UTC (rev 686)
+++ trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/attachment/Attachment.java 2008-02-06 10:44:22 UTC (rev 687)
@@ -94,7 +94,7 @@
* the new data hash
*/
public void setDataHash(String dataHash) {
- this.dataHash = dataHash;
+ this.dataHash = StringUtils.leftPad(dataHash, 32, '0');
}
/**
@@ -120,16 +120,4 @@
return hexHash;
}
- /**
- * Gets the file name from unique id.
- *
- * @param uniqueId
- * the unique id
- *
- * @return the file name from unique id
- */
- public static String getFileNameFromUniqueId(String uniqueId) {
- return uniqueId.substring(33);
- }
-
}
Modified: trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/ElementGenerator.java
===================================================================
--- trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/ElementGenerator.java 2008-02-05 15:53:04 UTC (rev 686)
+++ trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/ElementGenerator.java 2008-02-06 10:44:22 UTC (rev 687)
@@ -19,7 +19,6 @@
import java.io.ByteArrayInputStream;
import java.io.InputStream;
-import java.math.BigInteger;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
@@ -29,6 +28,7 @@
import java.util.UUID;
import org.apache.commons.lang.RandomStringUtils;
+import org.codelutin.util.MD5;
import fr.cemagref.simexplorer.is.attachment.Attachment;
import fr.cemagref.simexplorer.is.attachment.ContentTypeFactory;
@@ -52,6 +52,57 @@
*/
public class ElementGenerator {
+ /**
+ * The Class RandomStream.
+ */
+ public class RandomStream {
+
+ /** The stream. */
+ private InputStream stream;
+
+ /** The md5. */
+ private String md5;
+
+ /**
+ * Gets the stream.
+ *
+ * @return the stream
+ */
+ public InputStream getStream() {
+ return stream;
+ }
+
+ /**
+ * Sets the stream.
+ *
+ * @param stream
+ * the new stream
+ */
+ public void setStream(InputStream stream) {
+ this.stream = stream;
+ }
+
+ /**
+ * Gets the md5.
+ *
+ * @return the md5
+ */
+ public String getMd5() {
+ return md5;
+ }
+
+ /**
+ * Sets the md5.
+ *
+ * @param md5
+ * the new md5
+ */
+ public void setMd5(String md5) {
+ this.md5 = md5;
+ }
+
+ }
+
/** The r. */
private Random r = new Random();
@@ -152,9 +203,6 @@
/**
* Generate array.
*
- * @param <T>
- * clazz Class
- *
* @param clazz
* the clazz
*
@@ -334,14 +382,23 @@
* @throws Exception
* the exception
*/
- public InputStream generateTextStream() throws Exception {
+ public RandomStream generateTextStream() throws Exception {
+ RandomStream rs = new RandomStream();
+
int wordcount = 300 + r.nextInt(300);
StringBuffer sb = new StringBuffer();
for (int i = 0; i < wordcount; i++) {
sb.append(randomstrings[r.nextInt(cs)]).append(" ");
}
+
+ MD5 md5 = new MD5();
+ md5.Update(sb.toString().getBytes());
+ rs.setMd5(md5.asHex());
+
InputStream is;
is = new ByteArrayInputStream(sb.toString().getBytes());
- return is;
+ rs.setStream(is);
+
+ return rs;
}
}
Modified: trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java
===================================================================
--- trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java 2008-02-05 15:53:04 UTC (rev 686)
+++ trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java 2008-02-06 10:44:22 UTC (rev 687)
@@ -315,7 +315,7 @@
try {
MetaData mde = getMetadata(token, uuid, version);
InputStream stream = getStorageEngine().retrieveData(token, mde,
- Attachment.getFileNameFromUniqueId(dataKey));
+ dataKey);
RemoteInputStreamServer remoteStream = new SimpleRemoteInputStream(
stream);
return remoteStream.export();
Modified: trunk/simexplorer-is-service/src/test/fr/cemagref/simexplorer/is/service/StorageServiceMassInsert.java
===================================================================
--- trunk/simexplorer-is-service/src/test/fr/cemagref/simexplorer/is/service/StorageServiceMassInsert.java 2008-02-05 15:53:04 UTC (rev 686)
+++ trunk/simexplorer-is-service/src/test/fr/cemagref/simexplorer/is/service/StorageServiceMassInsert.java 2008-02-06 10:44:22 UTC (rev 687)
@@ -43,6 +43,7 @@
import fr.cemagref.simexplorer.is.entities.data.Library;
import fr.cemagref.simexplorer.is.factories.BaseEntityFactory;
import fr.cemagref.simexplorer.is.factories.XmlConstants;
+import fr.cemagref.simexplorer.is.service.ElementGenerator.RandomStream;
/**
* The Class StorageServiceMassInsert.
@@ -126,10 +127,6 @@
ea.getMetaData().getVersion().incVersion(r.nextInt(3));
- InputStream xmlStream = BaseEntityFactory.getFactory(
- ExplorationApplication.class).saveElement(
- XmlConstants.VALUE_METADATA_TYPE_EA, ea);
-
Map<String, RemoteInputStream> attachments = new HashMap<String, RemoteInputStream>();
List<Attachment> attachmentsKeys = new ArrayList<Attachment>();
@@ -152,13 +149,19 @@
}
for (Attachment attachment : attachmentsKeys) {
- InputStream stream = elementGenerator.generateTextStream();
+ RandomStream randomStream = elementGenerator
+ .generateTextStream();
+ attachment.setDataHash(randomStream.getMd5());
RemoteInputStreamServer remoteStream = new SimpleRemoteInputStream(
- stream);
+ randomStream.getStream());
attachments.put(attachment.getUniqueId(), remoteStream
.export());
}
+ InputStream xmlStream = BaseEntityFactory.getFactory(
+ ExplorationApplication.class).saveElement(
+ XmlConstants.VALUE_METADATA_TYPE_EA, ea);
+
RemoteInputStreamServer xmlRemoteStream = new SimpleRemoteInputStream(
xmlStream);
storageService.saveElement(token, xmlRemoteStream.export(),
Modified: trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/FileSystemAttachmentHandler.java
===================================================================
--- trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/FileSystemAttachmentHandler.java 2008-02-05 15:53:04 UTC (rev 686)
+++ trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/FileSystemAttachmentHandler.java 2008-02-06 10:44:22 UTC (rev 687)
@@ -102,7 +102,7 @@
throws SimExplorerStorageException {
String md5 = null;
try {
- MD5.asHex(MD5.getHash(getFile(entity, field)));
+ md5 = MD5.asHex(MD5.getHash(getFile(entity, field)));
} catch (Exception e) {
throw new SimExplorerStorageException(e);
}
Modified: trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/Install.java
===================================================================
--- trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/Install.java 2008-02-05 15:53:04 UTC (rev 686)
+++ trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/Install.java 2008-02-06 10:44:22 UTC (rev 687)
@@ -39,6 +39,7 @@
import fr.cemagref.simexplorer.is.factories.BaseEntityFactory;
import fr.cemagref.simexplorer.is.factories.XmlConstants;
import fr.cemagref.simexplorer.is.service.ElementGenerator;
+import fr.cemagref.simexplorer.is.service.ElementGenerator.RandomStream;
import fr.cemagref.simexplorer.is.ui.web.SimExplorerWebException;
import fr.cemagref.simexplorer.is.ui.web.pages.security.SuperAdminPage;
import fr.cemagref.simexplorer.is.ui.web.services.RemoteStorageService;
@@ -89,10 +90,6 @@
ea.getMetaData().getVersion().incVersion(r.nextInt(3));
- InputStream xmlStream = BaseEntityFactory.getFactory(
- ExplorationApplication.class).saveElement(
- XmlConstants.VALUE_METADATA_TYPE_EA, ea);
-
Map<String, RemoteInputStream> attachments = new HashMap<String, RemoteInputStream>();
List<Attachment> attachmentsKeys = new ArrayList<Attachment>();
@@ -115,14 +112,19 @@
}
for (Attachment attachment : attachmentsKeys) {
- InputStream stream = elementGenerator
+ RandomStream randomStream = elementGenerator
.generateTextStream();
+ attachment.setDataHash(randomStream.getMd5());
RemoteInputStreamServer remoteStream = new SimpleRemoteInputStream(
- stream);
+ randomStream.getStream());
attachments.put(attachment.getUniqueId(), remoteStream
.export());
}
+ InputStream xmlStream = BaseEntityFactory.getFactory(
+ ExplorationApplication.class).saveElement(
+ XmlConstants.VALUE_METADATA_TYPE_EA, ea);
+
RemoteInputStreamServer xmlRemoteStream = new SimpleRemoteInputStream(
xmlStream);
RemoteStorageService.getStorageService().saveElement(
1
0
r686 - in trunk: simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/attachment simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/factories simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/database/lucene simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine simexplorer-is-storage/src/
by glandais@users.labs.libre-entreprise.org 05 Feb '08
by glandais@users.labs.libre-entreprise.org 05 Feb '08
05 Feb '08
Author: glandais
Date: 2008-02-05 15:53:04 +0000 (Tue, 05 Feb 2008)
New Revision: 686
Removed:
trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/util/ZipStreamEncoder.java
Modified:
trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/attachment/Attachment.java
trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/factories/MetaDataFactory.java
trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/ElementGenerator.java
trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java
trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/AttachmentHandler.java
trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/FileSystemAttachmentHandler.java
trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/database/lucene/LuceneDatabase.java
trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngine.java
trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineImpl.java
trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementExport.java
Log:
Hash handling
Modified: trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/attachment/Attachment.java
===================================================================
--- trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/attachment/Attachment.java 2008-02-05 14:28:57 UTC (rev 685)
+++ trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/attachment/Attachment.java 2008-02-05 15:53:04 UTC (rev 686)
@@ -38,7 +38,7 @@
private ContentType contentType;
/** Data hash. */
- private int dataHash;
+ private String dataHash;
/**
* Gets the file name.
@@ -83,7 +83,7 @@
*
* @return the data hash
*/
- public int getDataHash() {
+ public String getDataHash() {
return dataHash;
}
@@ -93,7 +93,7 @@
* @param dataHash
* the new data hash
*/
- public void setDataHash(int dataHash) {
+ public void setDataHash(String dataHash) {
this.dataHash = dataHash;
}
@@ -103,52 +103,11 @@
* @return the unique id
*/
public String getUniqueId() {
- String hexDataHash = StringUtils.leftPad(Integer.toHexString(dataHash),
- 8, '0');
+ String hexDataHash = StringUtils.leftPad(dataHash, 32, '0');
return hexDataHash + fileName;
}
/**
- * Int from hex string.
- *
- * @param nm
- * the nm
- *
- * @return the int
- *
- * @throws NumberFormatException
- * the number format exception
- */
- public static int intFromHexString(String nm) throws NumberFormatException {
- int radix = 16;
- int index = 0;
- int result = 0;
-
- // Handle radix specifier, if present
- if (nm.startsWith("0x", index) || nm.startsWith("0X", index)) {
- index += 2;
- radix = 16;
- } else if (nm.startsWith("#", index)) {
- index++;
- radix = 16;
- }
- if (nm.length() - index > 8) {
- throw new NumberFormatException(nm + " exceeds 8 digits");
- }
- int digit;
- for (int i = index; i < nm.length(); i++) {
- result = result << 4;
- digit = Character.digit(nm.charAt(i), radix);
- if (digit == -1) {
- throw new NumberFormatException(nm + " : \'" + nm.charAt(i)
- + "\' is not a valid hex digit");
- }
- result |= digit;
- }
- return result;
- }
-
- /**
* Gets the hash from unique id.
*
* @param uniqueId
@@ -156,9 +115,9 @@
*
* @return the hash from unique id
*/
- public static int getHashFromUniqueId(String uniqueId) {
- String hexHash = uniqueId.substring(0, 8);
- return intFromHexString("0X" + hexHash);
+ public static String getHashFromUniqueId(String uniqueId) {
+ String hexHash = uniqueId.substring(0, 32);
+ return hexHash;
}
/**
@@ -170,7 +129,7 @@
* @return the file name from unique id
*/
public static String getFileNameFromUniqueId(String uniqueId) {
- return uniqueId.substring(9);
+ return uniqueId.substring(33);
}
}
Modified: trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/factories/MetaDataFactory.java
===================================================================
--- trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/factories/MetaDataFactory.java 2008-02-05 14:28:57 UTC (rev 685)
+++ trunk/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/factories/MetaDataFactory.java 2008-02-05 15:53:04 UTC (rev 686)
@@ -36,7 +36,9 @@
/**
* A factory for creating MetaData objects.
- * @param <E> MetaData
+ *
+ * @param <E>
+ * MetaData
*/
public class MetaDataFactory<E extends MetaData> extends
BaseEntityFactory<MetaData> {
@@ -55,8 +57,10 @@
/**
* Gets the factory.
- * @param <E> Metadata
*
+ * @param <E>
+ * Metadata
+ *
* @param entityClass
* the entity class
*
@@ -151,7 +155,7 @@
String dataHash = getXMLProperty(attachmentElement,
KEY_METADATA_ATTACHMENT_HASH);
- attachment.setDataHash(Integer.parseInt(dataHash));
+ attachment.setDataHash(dataHash);
attachments.add(attachment);
}
@@ -239,8 +243,7 @@
KEY_METADATA_ATTACHMENT_TYPE, attachment
.getContentType().getClass().getSimpleName());
setXMLProperty(document, attachmentElement,
- KEY_METADATA_ATTACHMENT_HASH, Integer
- .toString(attachment.getDataHash()));
+ KEY_METADATA_ATTACHMENT_HASH, attachment.getDataHash());
attachmentsElement.appendChild(attachmentElement);
}
Modified: trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/ElementGenerator.java
===================================================================
--- trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/ElementGenerator.java 2008-02-05 14:28:57 UTC (rev 685)
+++ trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/ElementGenerator.java 2008-02-05 15:53:04 UTC (rev 686)
@@ -19,6 +19,7 @@
import java.io.ByteArrayInputStream;
import java.io.InputStream;
+import java.math.BigInteger;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
@@ -245,7 +246,8 @@
Attachment attachment = new Attachment();
attachment.setContentType(ContentTypeFactory
.getContentTypeInstance("RawType"));
- attachment.setDataHash(r.nextInt());
+
+ attachment.setDataHash("d41d8cd98f00b204e9800998ecf8427e");
attachment.setFileName(shortString() + ".txt");
return attachment;
}
Modified: trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java
===================================================================
--- trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java 2008-02-05 14:28:57 UTC (rev 685)
+++ trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java 2008-02-05 15:53:04 UTC (rev 686)
@@ -17,6 +17,8 @@
* ##% */
package fr.cemagref.simexplorer.is.service;
+import static org.codelutin.i18n.I18n._;
+
import java.io.IOException;
import java.io.InputStream;
import java.io.PipedInputStream;
@@ -29,6 +31,7 @@
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
+import org.codelutin.util.ZipStreamEncoder;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -46,7 +49,6 @@
import fr.cemagref.simexplorer.is.factories.XmlConstants;
import fr.cemagref.simexplorer.is.storage.SimExplorerStorageException;
import fr.cemagref.simexplorer.is.storage.engine.StorageEngine;
-import fr.cemagref.simexplorer.is.storage.util.ZipStreamEncoder;
/**
* The Class StorageServiceCommon.
@@ -437,10 +439,17 @@
List<Attachment> realAttachments = metaData.getAttachments();
for (Attachment attachment : realAttachments) {
+ String idAttachment = idsattachment.get(attachment.getUniqueId());
+ // Check hash of attachments
+ String md5 = getStorageEngine().retrieveMD5TempData(idAttachment);
+ if (!md5.equals(attachment.getDataHash())) {
+ throw new SimExplorerServiceException(
+ _("simexplorer.service.invalidhash"));
+ }
+
attachments.put(attachment.getFileName(), getStorageEngine()
- .retrieveTempData(
- idsattachment.get(attachment.getUniqueId())));
+ .retrieveTempData(idAttachment));
}
getStorageEngine().saveElement(token, metaData, attachments);
Modified: trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/AttachmentHandler.java
===================================================================
--- trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/AttachmentHandler.java 2008-02-05 14:28:57 UTC (rev 685)
+++ trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/AttachmentHandler.java 2008-02-05 15:53:04 UTC (rev 686)
@@ -42,8 +42,8 @@
* @throws SimExplorerStorageException
* the sim explorer storage exception
*/
- public abstract void storeData(MetaData entity, String field,
- InputStream is) throws SimExplorerStorageException;
+ public abstract void storeData(MetaData entity, String field, InputStream is)
+ throws SimExplorerStorageException;
/**
* Retrieve content.
@@ -62,6 +62,22 @@
throws SimExplorerStorageException;
/**
+ * Retrieve MD5.
+ *
+ * @param entity
+ * the entity
+ * @param field
+ * the field
+ *
+ * @return the string
+ *
+ * @throws SimExplorerStorageException
+ * the sim explorer storage exception
+ */
+ public abstract String retrieveMD5Data(MetaData entity, String field)
+ throws SimExplorerStorageException;
+
+ /**
* Delete content.
*
* @param entity
Modified: trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/FileSystemAttachmentHandler.java
===================================================================
--- trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/FileSystemAttachmentHandler.java 2008-02-05 14:28:57 UTC (rev 685)
+++ trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/attachment/FileSystemAttachmentHandler.java 2008-02-05 15:53:04 UTC (rev 686)
@@ -26,6 +26,8 @@
import java.io.IOException;
import java.io.InputStream;
+import org.codelutin.util.MD5;
+
import fr.cemagref.simexplorer.is.entities.metadata.MetaData;
import fr.cemagref.simexplorer.is.storage.SimExplorerStorageException;
import fr.cemagref.simexplorer.is.storage.util.Config;
@@ -93,6 +95,21 @@
}
/* (non-Javadoc)
+ * @see fr.cemagref.simexplorer.is.storage.attachment.AttachmentHandler#retrieveMD5Data(fr.cemagref.simexplorer.is.entities.metadata.MetaData, java.lang.String)
+ */
+ @Override
+ public String retrieveMD5Data(MetaData entity, String field)
+ throws SimExplorerStorageException {
+ String md5 = null;
+ try {
+ MD5.asHex(MD5.getHash(getFile(entity, field)));
+ } catch (Exception e) {
+ throw new SimExplorerStorageException(e);
+ }
+ return md5;
+ }
+
+ /* (non-Javadoc)
* @see fr.cemagref.simexplorer.is.storage.attachment.AttachmentHandler#storeData(fr.cemagref.simexplorer.is.entities.metadata.MetaData, java.lang.String, java.io.InputStream)
*/
@Override
Modified: trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/database/lucene/LuceneDatabase.java
===================================================================
--- trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/database/lucene/LuceneDatabase.java 2008-02-05 14:28:57 UTC (rev 685)
+++ trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/database/lucene/LuceneDatabase.java 2008-02-05 15:53:04 UTC (rev 686)
@@ -752,8 +752,7 @@
attachment.setFileName(fieldValue);
}
if (field.equals(KEY_ATTACHMENT_HASH)) {
- attachment.setDataHash(Attachment.intFromHexString("0X"
- + fieldValue));
+ attachment.setDataHash(fieldValue);
}
if (field.equals(KEY_ATTACHMENT_TYPE)) {
attachment.setContentType(ContentTypeFactory
@@ -857,8 +856,8 @@
String key = KEY_ATTACHMENT + DOT + i;
addSimpleField(document, key + DOT + KEY_ATTACHMENT_FILENAME,
attachment.getFileName());
- addSimpleField(document, key + DOT + KEY_ATTACHMENT_HASH, Integer
- .toHexString(attachment.getDataHash()));
+ addSimpleField(document, key + DOT + KEY_ATTACHMENT_HASH,
+ attachment.getDataHash());
addSimpleField(document, key + DOT + KEY_ATTACHMENT_TYPE,
attachment.getContentType().getClass().getSimpleName());
i++;
Modified: trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngine.java
===================================================================
--- trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngine.java 2008-02-05 14:28:57 UTC (rev 685)
+++ trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngine.java 2008-02-05 15:53:04 UTC (rev 686)
@@ -305,6 +305,20 @@
throws SimExplorerStorageException;
/**
+ * Retrieve MD5 temp data.
+ *
+ * @param id
+ * the id
+ *
+ * @return the string
+ *
+ * @throws SimExplorerStorageException
+ * the sim explorer storage exception
+ */
+ public abstract String retrieveMD5TempData(String id)
+ throws SimExplorerStorageException;
+
+ /**
* Delete temporary data.
*
* @param id
Modified: trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineImpl.java
===================================================================
--- trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineImpl.java 2008-02-05 14:28:57 UTC (rev 685)
+++ trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineImpl.java 2008-02-05 15:53:04 UTC (rev 686)
@@ -290,6 +290,13 @@
return is;
}
+ @Override
+ public String retrieveMD5TempData(String id)
+ throws SimExplorerStorageException {
+ String md5 = attachmentHandler.retrieveMD5Data(mdTmp, id);
+ return md5;
+ }
+
/* (non-Javadoc)
* @see fr.cemagref.simexplorer.is.storage.engine.StorageEngine#deleteTempData(java.lang.String)
*/
Deleted: trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/util/ZipStreamEncoder.java
===================================================================
--- trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/util/ZipStreamEncoder.java 2008-02-05 14:28:57 UTC (rev 685)
+++ trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/util/ZipStreamEncoder.java 2008-02-05 15:53:04 UTC (rev 686)
@@ -1,87 +0,0 @@
-/*
-* ##% Copyright (C) 2008 Code Lutin, 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.storage.util;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PipedOutputStream;
-import java.util.Map;
-import java.util.zip.Deflater;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipOutputStream;
-
-/**
- * The Class ZipStreamEncoder.
- */
-public class ZipStreamEncoder extends Thread {
-
- /** The Constant BUFFER. */
- static final int BUFFER = 2048;
-
- /** The files. */
- private Map<String, InputStream> files;
-
- /** The os. */
- private PipedOutputStream os;
-
- /** The zos. */
- private ZipOutputStream zos;
-
- /**
- * Instantiates a new zip stream encoder.
- *
- * @param files
- * the files
- * @param os
- * the os
- */
- public ZipStreamEncoder(Map<String, InputStream> files, PipedOutputStream os) {
- super();
- this.files = files;
- this.os = os;
-
- zos = new ZipOutputStream(this.os);
- zos.setMethod(ZipOutputStream.DEFLATED);
- zos.setLevel(Deflater.BEST_COMPRESSION);
- }
-
- /* (non-Javadoc)
- * @see java.lang.Thread#run()
- */
- @Override
- public void run() {
- byte data[] = new byte[BUFFER];
- try {
- for (Map.Entry<String, InputStream> kv : files.entrySet()) {
- ZipEntry entry = new ZipEntry(kv.getKey());
- InputStream origin = kv.getValue();
- zos.putNextEntry(entry);
- int count;
- while ((count = origin.read(data, 0, BUFFER)) != -1) {
- zos.write(data, 0, count);
- }
- origin.close();
- }
-
- zos.close();
- } catch (IOException e) {
- // TODO
- }
- }
-
-}
Modified: trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementExport.java
===================================================================
--- trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementExport.java 2008-02-05 14:28:57 UTC (rev 685)
+++ trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementExport.java 2008-02-05 15:53:04 UTC (rev 686)
@@ -373,8 +373,7 @@
+ attachment.getUniqueId();
node.setColumns(generateStringArray(attachment.getContentType()
- .getDescription(), Integer
- .toHexString(attachment.getDataHash()), generateString(
+ .getDescription(), attachment.getDataHash(), generateString(
attachment.getFileName(), "downloadFile", context)));
return node;
}
1
0