/*
*
* Copyright 2005 AgileTec s.r.l. (http://www.agiletec.it) All rights reserved.
*
* This file is part of jAPS software.
* jAPS is a free software;
* you can redistribute it and/or modify it
* under the terms of the GNU General Public License (GPL) as published by the Free Software Foundation; version 2.
*
* See the file License for the specific language governing permissions
* and limitations under the License
*
*
*
* Copyright 2005 AgileTec s.r.l. (http://www.agiletec.it) All rights reserved.
*
*/
package com.agiletec.plugins.jacms.aps.system.services.content.model;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.agiletec.aps.system.common.entity.model.ApsEntity;
import com.agiletec.aps.system.common.entity.model.IApsEntity;
import com.agiletec.aps.system.common.entity.parse.IApsEntityDOM;
import com.agiletec.plugins.jacms.aps.system.services.content.parse.ContentDOM;
/**
* Rappresenta un contenuto informativo.
* La struttura del contenuto, definita in configurazione, è costruita con il metodo
* addAttribute(), ma questa modalità è riservata alla fase di inizializzazione del servizio
* dei contenuti; in tutte le altre occasioni un contenuto deve essere istanziato
* mediante richiesta al servizio, che lo otterrà mediante clonazione del prototipo
* precedentemente costruito.
* @author
*/
public class Content extends ApsEntity {
/**
* Restituisce lo stato del contenuto.
* @return Lo stato del contenuto.
*/
public String getStatus() {
return this._status;
}
/**
* Setta lo stato del contenuto.
* @param status Lo stato del contenuto.
*/
public void setStatus(String status) {
this._status = status;
}
/**
* Restituisce il codice della pagina (settata dalla configurazione del
* tipo di contenuto) dedicata alla visualizzazione del contenuto.
* @return Il codice pagina dedicata alla visualizzazione del contenuto.
*/
public String getViewPage() {
return this._viewPage;
}
/**
* Setta il codice della pagina (settata dalla configurazione del
* tipo di contenuto) dedicata alla visualizzazione del contenuto.
* @param viewPage Il codice pagina dedicata alla visualizzazione del contenuto.
*/
public void setViewPage(String viewPage) {
this._viewPage = viewPage;
}
/**
* Restituisce l'identificativo del modello (settato dalla configurazione
* del tipo di contenuto) dedicata alla formattazione del contenuto per la
* visualizzazione in lista.
* @return Il modello per la visualizzazione del contenuto in lista.
*/
public String getListModel() {
return this._listModel;
}
/**
* Setta l'identificativo del modello (settato dalla configurazione del
* tipo di contenuto) dedicata alla formattazione del contenuto per la
* visualizzazione in lista.
* @param listModel Il modello per la visualizzazione del contenuto in lista.
*/
public void setListModel(String listModel) {
this._listModel = listModel;
}
/**
* Restituisce l'identificativo del modello di default (settato dalla
* configurazione del tipo di contenuto) dedicata alla formattazione
* del contenuto per la visualizzazione completa.
* @return Il modello per la visualizzazione completa del contenuto.
*/
public String getDefaultModel() {
return this._defaultModel;
}
/**
* Setta l'identificativo del modello di default (settato dalla
* configurazione del tipo di contenuto) dedicata alla formattazione
* del contenuto per la visualizzazione completa.
* @param defaultModel Il modello per la visualizzazione completa del contenuto.
*/
public void setDefaultModel(String defaultModel) {
this._defaultModel = defaultModel;
}
@Override
public IApsEntity getEntityPrototype() {
Content content = (Content) super.getEntityPrototype();
content.setStatus(STATUS_NEW);
content.setVersion(INIT_VERSION);
content.setViewPage(this.getViewPage());
content.setListModel(this.getListModel());
content.setDefaultModel(this.getDefaultModel());
return content;
}
@Override
protected IApsEntityDOM getBuildJDOM() {
ContentDOM contentDOM = (ContentDOM) super.getBuildJDOM();
contentDOM.setStatus(this.getStatus());
contentDOM.setVersion(this.getVersion());
contentDOM.setLastEditor(this.getLastEditor());
contentDOM.setCreationDate(this.getCreated());
contentDOM.setModifyDate(this.getLastModified());
return contentDOM;
}
/**
* Indica se è presente il contenuto Online.
* @return Returns the onLine.
*/
public boolean isOnLine() {
return this._onLine;
}
/**
* Setta se è presente il contenuto Online.
* @param onLine The onLine to set.
*/
public void setOnLine(boolean onLine) {
this._onLine = onLine;
}
public Date getCreated() {
return _created;
}
public void setCreated(Date created) {
this._created = created;
}
public Date getLastModified() {
return _lastModified;
}
public void setLastModified(Date lastModified) {
this._lastModified = lastModified;
}
public String getVersion() {
return _version;
}
public void setVersion(String version) {
Pattern pattern = Pattern.compile("\\d+\\.\\d+");
Matcher matcher = pattern.matcher(version);
if (!matcher.matches()) {
throw new RuntimeException("Invalid content version");
}
this._version = version;
}
public void incrementVersion(boolean approve) {
if (approve) {
this.updateVersionIdOnPublishing();
} else {
this.updateVersionId();
}
}
protected void updateVersionId() {
String prevVersionId = this.getVersion();
if (null == prevVersionId) prevVersionId = INIT_VERSION;
String[] item = this.getVersionItems(prevVersionId);
int workVersion = Integer.parseInt(item[1]);
int newWorkVersion = workVersion + 1;
String newVersionId = item[0] + "." + newWorkVersion;
this.setVersion(newVersionId);
}
protected void updateVersionIdOnPublishing() {
String prevVersionId = this.getVersion();
if (null == prevVersionId) prevVersionId = INIT_VERSION;
String[] item = this.getVersionItems(prevVersionId);
int onlineVersion = Integer.parseInt(item[0]);
int newOnlineVersion = onlineVersion + 1;
String newVersionId = newOnlineVersion + ".0";
this.setVersion(newVersionId);
}
protected String[] getVersionItems(String versionId) {
return versionId.split("\\.");
}
public String getLastEditor() {
return _lastEditor;
}
public void setLastEditor(String lastEditor) {
this._lastEditor = lastEditor;
}
private String _status;
private boolean _onLine;
private String _viewPage;
private String _listModel;
private String _defaultModel;
private Date _created;
private Date _lastModified;
private String _version;
private String _lastEditor;
/**
* La descrizione dello stato del nuovo contenuto.
*/
@Deprecated
public static final String STATES_NEW = "Nuovo";
public static final String STATUS_NEW = "NEW";
/**
* La descrizione dello stato del contenuto in bozza.
*/
@Deprecated
public static final String STATES_DRAFT = "Bozza";
public static final String STATUS_DRAFT = "DRAFT";
/**
* La descrizione dello stato del contenuto pronto.
*/
@Deprecated
public static final String STATES_READY = "Pronto";
public static final String STATUS_READY = "READY";
public static final String STATUS_PUBLIC = "PUBLIC";
/**
* L'array delle descrizioni assegnabili
* direttamente da utenti redattori di contenuti.
*/
@Deprecated
public static final String[] STATES = {STATES_DRAFT, STATES_READY};
public static final String[] AVAILABLE_STATUS = {STATUS_DRAFT, STATUS_READY};
public static final String INIT_VERSION = "0.0";
}