import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
-import java.util.Iterator;
import java.util.List;
import java.util.ResourceBundle;
/**
* Published document.
*/
- private final transient Document _my;
+ private final transient Document _mydoc;
/**
* Document state.
*/
*/
private transient String _version;
/**
- * Presentation state.
+ * Presentation state: open, deep open, closed.
+ *
+ * @see DocumentFacade.State
*/
private transient State _display;
/**
setApplicationSettings(applicationSettings);
_owner = opened;
_me = represented;
- _my = _me.value();
- _state = _my.getProgressState();
+ _mydoc = _me.value();
+ _state = _mydoc.getProgressState();
_display = State.closed;
- refresh(); // Initializes the presentation of my document
+ refresh(); // Initializes the presentation of my document //NOPMD:RKV: to be reviewed
}
/**
* Constructs the facade of a document presented in the history folder.
*
+ * @param opened
+ * document owner
* @param represented
- * the represented history document
+ * document presentation
+ * @param projectSettings
+ * project settings service
+ * @param publicationService
+ * publication service
+ * @param applicationSettings
+ * application settings
*/
private DocumentFacade(final AbstractOpenObject opened,
final Document represented,
setApplicationSettings(applicationSettings);
_owner = opened;
_me = null; // Marks the history context
- _my = represented;
- _state = _my.getProgressState(); // In reality, HISTORY
+ _mydoc = represented;
+ _state = _mydoc.getProgressState(); // In reality, HISTORY
_display = State.open; // Because the given document is a history document
_description = ResourceBundle.getBundle("som",
applicationSettings.getCurrentLocale()).getString(
"history.creation")
- + " " + _my.getAuthor().toString();
- _uses = null;
- _exports = null;
- _history = null;
- _popup = null;
+ + " " + _mydoc.getAuthor().toString();
this.refresh(); // Initializes the presentation of my document
}
// Public member functions
// ==============================================================================================================================
+ /**
+ * Open the presentation subtree.
+ */
public void develop() {
if (_display == State.open) { // Opening the history of document, if exist
if (_history.isEmpty()) {
- collectHistory(_my);
+ collectHistory(_mydoc);
}
_display = State.deepopen;
} else { // Opening the document
if (_uses == null) {
- List<Publication> relist = _me.getRelations(UsesRelation.class);
+ List<Relation> relist = _me.value().getRelations(UsesRelation.class);
_uses = new ArrayList<DocumentFacade>(relist.size());
- for (Iterator<Publication> i = relist.iterator(); i.hasNext();) {
- Publication used = i.next();
- long index = used.getIndex();
- DocumentFacade facade = _owner.docpres.get(index);
+ for (Relation relation : relist) {
+ Document used = ((UsesRelation)relation).getTo();
+
+ DocumentFacade facade = null;
+
+ Publication publication = _me.getOwner().getPublication(used);
+ if(publication == null) {
+ publication = _me.getOwnerStudy().getPublication(used);
+ }
+ if(publication != null) {
+ facade = _owner._docpres.get(publication.getIndex());
+ }
+
if (facade == null) {
facade = new DocumentFacade(_owner, used,
getProjectSettings(), getPublicationService(),
getApplicationSettings());
- _owner.docpres.put(index, facade);
}
_uses.add(facade);
}
}
if (_exports == null) {
- List<Relation> relation = _my
- .getRelations(ConvertsRelation.class);
-
- _exports = new ArrayList<FileFacade>(relation.size());
- for (Iterator<Relation> i = relation.iterator(); i.hasNext();) {
- ConvertsRelation export = (ConvertsRelation) i.next();
- _exports.add(new FileFacade(export,
- getApplicationSettings()));
- }
+ updateExports();
}
if (_history == null) {
- if (_my.getPreviousVersion() != null
+ if (_mydoc.getPreviousVersion() != null
|| _state == ProgressState.inCHECK
|| _state == ProgressState.APPROVED) {
_history = new ArrayList<HistoryFacade>();
_display = State.open;
}
}
+
+ /**
+ * Update the list of export files.
+ */
+ private void updateExports() {
+ List<Relation> relations = _mydoc
+ .getRelations(ConvertsRelation.class);
+
+ _exports = new ArrayList<FileFacade>(relations.size());
+ for (Relation rel : relations) {
+ _exports.add(new FileFacade((ConvertsRelation)rel,
+ getApplicationSettings()));
+ }
+ }
+ /**
+ * Close the presentation tree partially.
+ */
public void reduce() {
if (_display == State.deepopen) {
_display = State.open;
}
}
+ /**
+ * Close the presentation tree.
+ */
public void reduceAll() {
_display = State.closed;
}
// Getters
// ==============================================================================================================================
+ /**
+ * Get a list of attached files presentations.
+ *
+ * @return list of FileFacades
+ */
public List<FileFacade> getAttachments() {
return _exports;
}
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.splat.simer.HistoryFacade#getDate()
+ */
public String getDate() {
return _date;
}
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.splat.simer.HistoryFacade#getDescription()
+ */
public String getDescription() {
return _description;
}
+ /**
+ * Get a document edit icon file name according to the document state.
+ *
+ * @return the icon file name
+ */
public String getEditIcon() {
return "icon.ed" + _state + ICON_EXT;
}
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.splat.simer.HistoryFacade#getFileIcon()
+ */
public String getFileIcon() {
return _icon;
}
+ /**
+ * Get the document history presentation.
+ *
+ * @return the history facade
+ */
public List<HistoryFacade> getHistory() {
return _history;
}
+ /**
+ * Get the document persistent id.
+ *
+ * @return the document persistent id
+ */
public String getIndex() {
- return String.valueOf(_my.getIndex());
+ return String.valueOf(_mydoc.getIndex());
}
+ /**
+ * Get the document contextual popup menu.
+ *
+ * @return the document popup menu
+ */
public PopupMenu getPopup() { // Contextualizes the pop-up
_popup
.setContext("document", new DocumentRights(_owner.getUser(),
return _popup; // callers must "use" the returned pop-up before getting another pop-up
}
+ /**
+ * Get the document presentation state: open, deep open, closed.
+ *
+ * @return the document presentation state
+ * @see DocumentFacade.State
+ */
public String getPresentationState() {
return _display.toString();
}
+ /**
+ * Get document progress state.
+ *
+ * @return the document state
+ * @see ProgressState
+ */
public String getProgressState() {
return _state.toString();
}
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.splat.simer.HistoryFacade#getSharingIcon()
+ */
public String getSharingIcon() {
return _sharing;
}
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.splat.simer.HistoryFacade#getSize()
+ */
public String getSize() {
return _size;
}
+ /**
+ * Get a document state icon file name according to the document state.
+ *
+ * @return the icon file name
+ */
public String getStateIcon() {
return "icon." + _state + ICON_EXT;
}
+ /**
+ * Get the document title.
+ *
+ * @return the document title
+ */
public String getTitle() {
- return _my.getTitle();
+ return _mydoc.getTitle();
}
+ /**
+ * Get the URL of the document in the repository.
+ *
+ * @return the document URL
+ */
public String getURL() {
return _surl;
}
+ /**
+ * Get the list of used documents presentations.
+ *
+ * @return list of DocumentFacades
+ */
public List<DocumentFacade> getUses() {
return _uses;
}
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.splat.simer.HistoryFacade#getVersion()
+ */
public String getVersion() {
return _version;
}
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.splat.simer.HistoryFacade#getVersioningIcon()
+ */
public String getVersioningIcon() {
return _updated;
}
+ /**
+ * Check if this is a representation of the given document publication.
+ *
+ * @param represented
+ * the document publication
+ * @return true if this facades represents the given document publication
+ */
public boolean isFacadeOf(final Publication represented) {
return _me.equals(represented);
}
DecimalFormat sizstring = new DecimalFormat(custom
.getString("size.format")); // Locale size display format
SimpleDateFormat datstring = new SimpleDateFormat(custom
- .getString("date.format")); // Locale date display format
- Revision.Format verstring = new Revision.Format(getProjectSettings()
- .getRevisionPattern());
- String path = _my.getSourceFile().getRelativePath();
+ .getString("date.format"), getApplicationSettings()
+ .getCurrentLocale()); // Locale date display format
+ String path = _mydoc.getSourceFile().getRelativePath();
String[] mapping = ApplicationSettings.getViewersMapping();
for (int i = 0; i < mapping.length; i++) {
- org.splat.dal.bo.som.File export = _my.getAttachedFile(mapping[i]);
+ org.splat.dal.bo.som.File export = _mydoc
+ .getAttachedFile(mapping[i]);
if (export != null) {
path = export.getRelativePath();
break;
}
_surl = getApplicationSettings().getRepositoryURL() + path;
_surl = _surl.replaceAll("'", "\\\\'");
- String format = _my.getFormat();
- if ("xml".equals(format)) {
- format = XMLDocument.getActualFormat(_my.getSourceFile().asFile());
- }
// Document state (overridable by the publication - see below)
- _state = _my.getProgressState();
- _version = _my.getVersion(); // May be null
+ _state = _mydoc.getProgressState();
+ _version = _mydoc.getVersion(); // May be null
+ initIcons();
+
+ // Document description
+ VersionsRelation versions = (VersionsRelation) _mydoc
+ .getFirstRelation(VersionsRelation.class);
+ if (versions != null) {
+ _description = versions.getDescription();
+ }
+ // File details
+ Revision.Format verstring = new Revision.Format(
+ getProjectSettings().getRevisionPattern());
+ _version = verstring.format(_version);
+ _size = sizstring.format(_mydoc.getSourceFile().asFile().length() / 1000);
+ _date = datstring.format(_mydoc.getLastModificationDate());
+ updateExports();
+ // Refresh of the history in case of promotion
+ if (_display == State.deepopen) {
+ _history.clear();
+ this.collectHistory(_mydoc);
+ }
+ initPopupMenu();
+ }
+
+ /**
+ * Initialize document presentation icons.
+ */
+ private final void initIcons() {
// Icons definition
+ String format = _mydoc.getFormat();
+ if ("xml".equals(format)) {
+ format = XMLDocument.getActualFormat(_mydoc.getSourceFile()
+ .asFile());
+ if ("schema".equals(_mydoc.getType().getName())) {
+ format = "schema";
+ }
+ }
+
_icon = "icon." + format + ICON_EXT;
_sharing = "image.hold.gif";
_updated = "image.hold.gif";
}
if (_me == null) { // Facade in the history folder
- if (_my.isVersioned()) { // History of the last version
- if (_my.isPublished()) {
+ if (_mydoc.isVersioned()) { // History of the last version
+ if (_mydoc.isPublished()) {
_sharing = "image.share.png"; // Not correct if published in a previous version of the study
_updated = "icon.hold.png";
}
}
}
} else {
- if (_me.getOwnerStudy().shares(_my)) {
+ if (_me.getOwnerStudy().shares(_mydoc)) {
_sharing = "image.share.png";
_updated = "icon.hold.png";
}
- if (_me.isOutdated()) {
- _state = ProgressState.inWORK; // Overrides the document state
- }
- }
- // Document description
- VersionsRelation versions = (VersionsRelation) _my
- .getFirstRelation(VersionsRelation.class);
- if (versions != null) {
- _description = versions.getDescription();
- }
- // File details
- if (_state != ProgressState.EXTERN) {
- _version = verstring.format(_version);
+ //if (_me.isOutdated()) {
+ // _state = ProgressState.inWORK; // Overrides the document state
+ //}
}
- _size = sizstring.format(_my.getSourceFile().asFile().length() / 1000);
- _date = datstring.format(_my.getLastModificationDate());
+ }
- // Refresh of the history in case of promotion
- if (_display == State.deepopen) {
- _history.clear();
- collectHistory(_my);
- }
+ /**
+ * Initialize document's popup menu.
+ */
+ private final void initPopupMenu() {
// Popup menus
if (_me != null) { // There is a pop-up
if (_state == ProgressState.EXTERN) {
} else if (_state == ProgressState.APPROVED) {
_popup = getApplicationSettings().getPopupMenu("approved");
} else { // (state == ProgressState.inCHECK)
- DocumentType mytype = _me.value().getType(); // Only result documents need to be approved
- Step mystep = getPublicationService().getInvolvedStep(_me);
- if (mytype.isResultOf(mystep.getStep())) {
+ DocumentType aType = _me.value().getType(); // Only result documents need to be approved
+ Step aStep = getPublicationService().getInvolvedStep(_me);
+ if (aType.isResultOf(aStep.getStep())) {
_popup = getApplicationSettings()
.getPopupMenu("approvable");
} else {
// Private services
// ==============================================================================================================================
+ /**
+ * Collect the document's previous versions presentation.
+ *
+ * @param given
+ * the document to explore
+ */
private final void collectHistory(final Document given) {
VersionsRelation versions = (VersionsRelation) given
.getFirstRelation(VersionsRelation.class);
_history.add(new DocumentFacade(_owner, given, getProjectSettings(),
getPublicationService(), getApplicationSettings()));
if (versions != null) {
- collectHistory(versions.getTo());
+ this.collectHistory(versions.getTo());
}
}