*/
public class DocumentFacade implements HistoryFacade {
- private final AbstractOpenObject owner;
- private final Publication me;
- private final Document my; // Published document
- private ProgressState state; // Document state
- private String version; // My document version in customized format
- private State display; // Presentation state
- private String surl; // URL of the source file
- private String format; // Extension of the source file
- private String icon; // Corresponding icon
- private String sharing; // Icon qualifying sharing between scenarios of a same study
- private String updated; // Icon qualifying versioning from the previous study version
- private String size;
- private String date;
- private String description;
- private List<DocumentFacade> uses;
- private List<FileFacade> exports;
- private List<HistoryFacade> history;
- private PopupMenu popup;
+ /**
+ * Icon extension.
+ */
+ static private final String ICON_EXT = ".png";
+ /**
+ * Document's owner.
+ */
+ private final transient AbstractOpenObject _owner;
+ /**
+ * Wrapped document publication.
+ */
+ private final transient Publication _me;
+ /**
+ * Published document.
+ */
+ private final transient Document _my;
+ /**
+ * Document state.
+ */
+ private transient ProgressState _state;
+ /**
+ * My document version in customized format.
+ */
+ private transient String _version;
+ /**
+ * Presentation state.
+ */
+ private transient State _display;
+ /**
+ * URL of the source file.
+ */
+ private transient String _surl;
+ /**
+ * Corresponding icon.
+ */
+ private transient String _icon;
+ /**
+ * Icon qualifying sharing between scenarios of a same study.
+ */
+ private transient String _sharing;
+ /**
+ * Icon qualifying versioning from the previous study version.
+ */
+ private transient String _updated;
+ /**
+ * Document size.
+ */
+ private transient String _size;
+ /**
+ * Document last modification date.
+ */
+ private transient String _date;
+ /**
+ * Document's description.
+ */
+ private transient String _description;
+ /**
+ * List of used documents presentations.
+ */
+ private transient List<DocumentFacade> _uses;
+ /**
+ * List of attached files presentations.
+ */
+ private transient List<FileFacade> _exports;
+ /**
+ * List of the document's history nodes.
+ */
+ private transient List<HistoryFacade> _history;
+ /**
+ * Document's popup menu.
+ */
+ private transient PopupMenu _popup;
/**
* Injected project settings service.
*/
- private ProjectSettingsService _projectSettingsService;
+ private ProjectSettingsService _projectSettings;
/**
* Injected publication service.
*/
*/
private ApplicationSettings _applicationSettings;
+ /**
+ * Document presentation state enumeration.
+ */
private enum State {
- closed, open, deepopen
+ /**
+ * Closed presentation state.
+ */
+ closed,
+ /**
+ * Open presentation state (history and attached files nodes are visible).
+ */
+ open,
+ /**
+ * Deeply open presentation.
+ */
+ deepopen
}
// ==============================================================================================================================
// Constructors
// ==============================================================================================================================
+ /**
+ * Constructor.
+ *
+ * @param opened
+ * document owner
+ * @param represented
+ * document presentation
+ * @param projectSettings
+ * project settings service
+ * @param publicationService
+ * publication service
+ * @param applicationSettings
+ * application settings
+ */
public DocumentFacade(final AbstractOpenObject opened,
final Publication represented,
final ProjectSettingsService projectSettings,
setProjectSettings(projectSettings);
setPublicationService(publicationService);
setApplicationSettings(applicationSettings);
- owner = opened;
- me = represented;
- my = me.value();
- state = my.getProgressState();
- display = State.closed;
- description = null;
- uses = null;
- exports = null;
- history = null;
- popup = null;
+ _owner = opened;
+ _me = represented;
+ _my = _me.value();
+ _state = _my.getProgressState();
+ _display = State.closed;
- this.refresh(); // Initializes the presentation of my document
+ refresh(); // Initializes the presentation of my document
}
/**
setProjectSettings(projectSettings);
setPublicationService(publicationService);
setApplicationSettings(applicationSettings);
- owner = opened;
- me = null; // Marks the history context
- my = represented;
- state = my.getProgressState(); // In reality, HISTORY
- display = State.open; // Because the given document is a history document
- description = ResourceBundle.getBundle("som",
+ _owner = opened;
+ _me = null; // Marks the history context
+ _my = represented;
+ _state = _my.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;
+ + " " + _my.getAuthor().toString();
+ _uses = null;
+ _exports = null;
+ _history = null;
+ _popup = null;
this.refresh(); // Initializes the presentation of my document
}
// ==============================================================================================================================
public void develop() {
- if (display != State.open) { // Opening the document
- if (uses == null) {
- List<Publication> relist = me.getRelations(UsesRelation.class);
+ if (_display == State.open) { // Opening the history of document, if exist
+ if (_history.isEmpty()) {
+ collectHistory(_my);
+ }
+ _display = State.deepopen;
+ } else { // Opening the document
+ if (_uses == null) {
+ List<Publication> relist = _me.getRelations(UsesRelation.class);
- uses = new ArrayList<DocumentFacade>(relist.size());
+ _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);
+ DocumentFacade facade = _owner.docpres.get(index);
if (facade == null) {
- facade = new DocumentFacade(owner, used,
+ facade = new DocumentFacade(_owner, used,
getProjectSettings(), getPublicationService(),
getApplicationSettings());
- owner.docpres.put(index, facade);
+ _owner.docpres.put(index, facade);
}
- uses.add(facade);
+ _uses.add(facade);
}
}
- if (exports == null) {
- List<Relation> relation = my
+ if (_exports == null) {
+ List<Relation> relation = _my
.getRelations(ConvertsRelation.class);
- exports = new ArrayList<FileFacade>(relation.size());
+ _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()));
+ _exports.add(new FileFacade(export,
+ getApplicationSettings()));
}
}
- if (history == null) {
- if (my.getPreviousVersion() != null
- || state == ProgressState.inCHECK
- || state == ProgressState.APPROVED) {
- history = new ArrayList<HistoryFacade>();
+ if (_history == null) {
+ if (_my.getPreviousVersion() != null
+ || _state == ProgressState.inCHECK
+ || _state == ProgressState.APPROVED) {
+ _history = new ArrayList<HistoryFacade>();
}
}
- display = State.open;
- } else { // Opening the history of document, if exist
- if (history.isEmpty()) {
- collectHistory(my);
- }
- display = State.deepopen;
+ _display = State.open;
}
}
public void reduce() {
- if (display == State.deepopen) {
- display = State.open;
+ if (_display == State.deepopen) {
+ _display = State.open;
}
}
public void reduceAll() {
- display = State.closed;
+ _display = State.closed;
}
// ==============================================================================================================================
// ==============================================================================================================================
public List<FileFacade> getAttachments() {
- return exports;
+ return _exports;
}
public String getDate() {
- return date;
+ return _date;
}
public String getDescription() {
- return description;
+ return _description;
}
public String getEditIcon() {
- return "icon.ed" + state + ".png";
+ return "icon.ed" + _state + ICON_EXT;
}
public String getFileIcon() {
- return icon;
+ return _icon;
}
public List<HistoryFacade> getHistory() {
- return history;
+ return _history;
}
public String getIndex() {
- return String.valueOf(my.getIndex());
+ return String.valueOf(_my.getIndex());
}
public PopupMenu getPopup() { // Contextualizes the pop-up
- popup.setContext("document", new DocumentRights(owner.getUser(), me));
- return popup; // callers must "use" the returned pop-up before getting another pop-up
+ _popup
+ .setContext("document", new DocumentRights(_owner.getUser(),
+ _me));
+ return _popup; // callers must "use" the returned pop-up before getting another pop-up
}
public String getPresentationState() {
- return display.toString();
+ return _display.toString();
}
public String getProgressState() {
- return state.toString();
+ return _state.toString();
}
public String getSharingIcon() {
- return sharing;
+ return _sharing;
}
public String getSize() {
- return size;
+ return _size;
}
public String getStateIcon() {
- return "icon." + state + ".png";
+ return "icon." + _state + ICON_EXT;
}
public String getTitle() {
- return my.getTitle();
+ return _my.getTitle();
}
public String getURL() {
- return surl;
+ return _surl;
}
public List<DocumentFacade> getUses() {
- return uses;
+ return _uses;
}
public String getVersion() {
- return version;
+ return _version;
}
public String getVersioningIcon() {
- return updated;
+ return _updated;
}
public boolean isFacadeOf(final Publication represented) {
- return me.equals(represented);
+ return _me.equals(represented);
}
// ==============================================================================================================================
// Protected services
// ==============================================================================================================================
- protected void refresh() {
+ /**
+ * Refresh the document presentation.
+ */
+ protected final void refresh() {
ResourceBundle custom = ResourceBundle.getBundle("som",
getApplicationSettings().getCurrentLocale());
DecimalFormat sizstring = new DecimalFormat(custom
.getString("date.format")); // Locale date display format
Revision.Format verstring = new Revision.Format(getProjectSettings()
.getRevisionPattern());
- String path = my.getSourceFile().getRelativePath();
+ String path = _my.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]);
- if (export == null) {
- continue;
+ org.splat.dal.bo.som.File export = _my.getAttachedFile(mapping[i]);
+ if (export != null) {
+ path = export.getRelativePath();
+ break;
}
- path = export.getRelativePath();
- break;
}
- surl = getApplicationSettings().getRepositoryURL() + path;
- surl = surl.replaceAll("'", "\\\\'");
- format = my.getFormat();
- if (format.equals("xml")) {
- format = XMLDocument.getActualFormat(my.getSourceFile().asFile());
+ _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 = _my.getProgressState();
+ _version = _my.getVersion(); // May be null
// Icons definition
- icon = "icon." + format + ".png";
- sharing = "image.hold.gif";
- updated = "image.hold.gif";
+ _icon = "icon." + format + ICON_EXT;
+ _sharing = "image.hold.gif";
+ _updated = "image.hold.gif";
File image = new File(ApplicationSettings.getApplicationSkinPath()
- + icon);
+ + _icon);
if (!image.exists()) {
- icon = "icon.any.png";
+ _icon = "icon.any.png";
}
- if (me != null) {
- if (me.getOwnerStudy().shares(my)) {
- sharing = "image.share.png";
- updated = "icon.hold.png";
- }
- if (me.isOutdated()) {
- state = ProgressState.inWORK; // Overrides the document state
- }
-
- } else { // Facade in the history folder
- if (!my.isVersioned()) { // History of the last version
- if (state != ProgressState.inWORK) {
- icon = "icon.inWORK.png";
+ if (_me == null) { // Facade in the history folder
+ if (_my.isVersioned()) { // History of the last version
+ if (_my.isPublished()) {
+ _sharing = "image.share.png"; // Not correct if published in a previous version of the study
+ _updated = "icon.hold.png";
+ }
+ } else {
+ if (_state == ProgressState.inWORK) {
+ _icon = "icon." + _state.toString() + ICON_EXT;
} else {
- icon = "icon." + state.toString() + ".png";
+ _icon = "icon.inWORK.png";
}
- } else if (my.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)) {
+ _sharing = "image.share.png";
+ _updated = "icon.hold.png";
+ }
+ if (_me.isOutdated()) {
+ _state = ProgressState.inWORK; // Overrides the document state
}
}
// Document description
- VersionsRelation versions = (VersionsRelation) my
+ VersionsRelation versions = (VersionsRelation) _my
.getFirstRelation(VersionsRelation.class);
if (versions != null) {
- description = versions.getDescription();
+ _description = versions.getDescription();
}
// File details
- if (state != ProgressState.EXTERN) {
- version = verstring.format(version);
+ if (_state != ProgressState.EXTERN) {
+ _version = verstring.format(_version);
}
- size = sizstring.format(my.getSourceFile().asFile().length() / 1000);
- date = datstring.format(my.getLastModificationDate());
+ _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);
+ if (_display == State.deepopen) {
+ _history.clear();
+ collectHistory(_my);
}
// Popup menus
- if (me == null) {
- return; // No pop-up (yet) in the history folder
- }
- if (state == ProgressState.EXTERN) {
- popup = getApplicationSettings().getPopupMenu("extern");
- } else if (state == ProgressState.inWORK) {
- popup = getApplicationSettings().getPopupMenu("editable");
- } else if (state == ProgressState.inDRAFT) {
- popup = getApplicationSettings().getPopupMenu("reviewable");
- } 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())) {
- popup = getApplicationSettings().getPopupMenu("approvable");
- } else {
- popup = getApplicationSettings().getPopupMenu("notresult");
+ if (_me != null) { // There is a pop-up
+ if (_state == ProgressState.EXTERN) {
+ _popup = getApplicationSettings().getPopupMenu("extern");
+ } else if (_state == ProgressState.inWORK) {
+ _popup = getApplicationSettings().getPopupMenu("editable");
+ } else if (_state == ProgressState.inDRAFT) {
+ _popup = getApplicationSettings().getPopupMenu("reviewable");
+ } 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())) {
+ _popup = getApplicationSettings()
+ .getPopupMenu("approvable");
+ } else {
+ _popup = getApplicationSettings().getPopupMenu("notresult");
+ }
}
}
}
+ /**
+ * Turn on the versioning icon.
+ */
protected void setVersioned() {
- updated = "image.modified.png";
+ _updated = "image.modified.png";
}
// ==============================================================================================================================
// Private services
// ==============================================================================================================================
- private void collectHistory(final Document given) {
+ private final void collectHistory(final Document given) {
VersionsRelation versions = (VersionsRelation) given
.getFirstRelation(VersionsRelation.class);
Timestamp[] stamp = given.getStamps(); // Stamps in ascending order of date
for (int i = stamp.length - 1; i > -1; i--) {
- history.add(new StampFacade(stamp[i], getApplicationSettings()
+ _history.add(new StampFacade(stamp[i], getApplicationSettings()
.getCurrentLocale()));
}
- history.add(new DocumentFacade(owner, given, getProjectSettings(),
+ _history.add(new DocumentFacade(_owner, given, getProjectSettings(),
getPublicationService(), getApplicationSettings()));
if (versions != null) {
collectHistory(versions.getTo());
* @return Project settings service
*/
private ProjectSettingsService getProjectSettings() {
- return _projectSettingsService;
+ return _projectSettings;
}
/**
* @param projectSettingsService
* project settings service
*/
- public void setProjectSettings(
+ public final void setProjectSettings(
final ProjectSettingsService projectSettingsService) {
- _projectSettingsService = projectSettingsService;
+ _projectSettings = projectSettingsService;
}
/**
* @param publicationService
* the publicationService to set
*/
- public void setPublicationService(
+ public final void setPublicationService(
final PublicationService publicationService) {
_publicationService = publicationService;
}
* @param applicationSettings
* the applicationSettings to set
*/
- public void setApplicationSettings(
+ public final void setApplicationSettings(
final ApplicationSettings applicationSettings) {
_applicationSettings = applicationSettings;
}