/*
*
* 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.resource.model;
import java.io.File;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import com.agiletec.aps.system.services.category.Category;
import com.agiletec.aps.system.services.group.Group;
import com.agiletec.plugins.jacms.aps.system.services.resource.model.util.IResourceInstanceHelper;
import com.agiletec.plugins.jacms.aps.system.services.resource.parse.ResourceDOM;
/**
* Classe astratta di base per gli oggetti Resource.
* @author W.Ambu - E.Santoboni
*/
public abstract class AbstractResource implements ResourceInterface, Serializable {
/**
* Inizializza gli elementi base costituenti la Risorsa.
*/
public AbstractResource() {
this.setId("");
this.setType("");
this.setDescr("");
this.setMainGroup("");
this.setMasterFileName("");
this._categories = new ArrayList<Category>();
this.setFolder("");
}
/**
* Restituisce l'identificativo della risorsa.
* @return L'identificativo della risorsa.
*/
@Override
public String getId() {
return _id;
}
/**
* Setta l'identificativo della risorsa.
* @param id L'identificativo della risorsa.
*/
@Override
public void setId(String id) {
this._id = id;
}
/**
* Restituisce il codice del tipo di risorsa.
* @return Il codice del tipo di risorsa.
*/
@Override
public String getType() {
return _typeCode;
}
/**
* Setta il codice del tipo di risorsa.
* @param typeCode Il codice del tipo di risorsa.
*/
@Override
public void setType(String typeCode) {
this._typeCode = typeCode;
}
/**
* Restituisce la descrizione della risorsa.
* @return La descrizione della risorsa.
*/
@Override
public String getDescr() {
return _descr;
}
/**
* Setta la descrizione della risorsa.
* @param descr La descrizione della risorsa.
*/
@Override
public void setDescr(String descr) {
this._descr = descr;
}
/**
* Restituisce la stringa identificante
* il gruppo principale di cui la risorsa è membro.
* @return Il gruppo principale di cui la risorsa è membro.
*/
@Override
public String getMainGroup() {
return _mainGroup;
}
/**
* Setta la stringa identificante
* il gruppo principale di cui il contenuto è membro.
* @param mainGroup Il gruppo principale di cui il contenuto è membro.
*/
@Override
public void setMainGroup(String mainGroup) {
this._mainGroup = mainGroup;
}
@Override
public String getMasterFileName() {
return _masterFileName;
}
@Override
public void setMasterFileName(String masterFileName) {
this._masterFileName = masterFileName;
}
/**
* Aggiunge una categoria alla lista delle categorie della risorsa.
* @param category La categoria da aggiungere.
*/
@Override
public void addCategory(Category category) {
this._categories.add(category);
}
/**
* Restituisce la lista di categorie associate alla risorsa.
* @return La lista di categorie associate alla risorsa.
*/
@Override
public List<Category> getCategories() {
return _categories;
}
/**
* Setta la lista di categorie associate alla risorsa.
* @param categories La lista di categorie associate alla risorsa.
*/
@Override
public void setCategories(List<Category> categories) {
this._categories = categories;
}
/**
* Rimuove una categoria alla lista delle categorie della risorsa.
* @param category La categoria da rimuovere.
*/
public void removeCategory(Category category) {
this._categories.remove(category);
}
/**
* Restituisce il nome della cartella contenitore delle risorse.
* @return Il nome della cartella contenitore delle risorse.
*/
@Override
public String getFolder() {
return _folder;
}
/**
* Setta il nome della cartella contenitore delle risorse.
* @param folder Il nome della cartella contenitore delle risorse.
*/
@Override
public void setFolder(String folder) {
if (!folder.endsWith("/")) {
folder += "/";
}
this._folder = folder;
}
/**
* Setta l'url base della cartella delle risorse.
* @param baseURL L'url base della cartella delle risorse.
*/
@Override
public void setBaseURL(String baseURL) {
if (!baseURL.endsWith("/")) {
baseURL += "/";
}
this._baseURL = baseURL;
}
/**
* Restituisce l'url base della cartella delle risorse.
* @return L'url base della cartella delle risorse.
*/
protected String getBaseURL() {
return _baseURL;
}
/**
* Restituice il percorso base su disco della cartella delle risorse.
* @return Il percorso base su disco della cartella delle risorse.
*/
private String getBaseDiskRoot() {
return _baseDiskRoot;
}
/**
* Setta il percorso base su disco della cartella delle risorse.
* @param baseDiskRoot Il percorso base su disco della cartella delle risorse.
*/
@Override
public void setBaseDiskRoot(String baseDiskRoot) {
this._baseDiskRoot = baseDiskRoot;
}
private String getProtectedBaseDiskRoot() {
return _protectedBaseDiskRoot;
}
@Override
public void setProtectedBaseDiskRoot(String protBaseDiskRoot) {
this._protectedBaseDiskRoot = protBaseDiskRoot;
}
/**
* Restituisce l'url base della cartella delle risorse pretette.
* @return L'url base della cartella delle risorse protette.
*/
protected String getProtectedBaseURL() {
return _protectedBaseURL;
}
@Override
public void setProtectedBaseURL(String protBaseURL) {
this._protectedBaseURL = protBaseURL;
}
@Override
public String[] getAllowedFileTypes() {
return this.getAllowedExtensions().split(",");
}
/**
* Setta la stringa rappresentante l'insieme delle estensioni consentite separate da virgola.
* @return L'insieme delle estensioni consentite.
*/
protected String getAllowedExtensions() {
return _allowedExtensions;
}
/**
* Setta la stringa rappresentante l'insieme delle estensioni consentite separate da virgola.
* @param allowedExtensions L'insieme delle estensioni consentite.
*/
public void setAllowedExtensions(String allowedExtensions) {
this._allowedExtensions = allowedExtensions;
}
@Override
public ResourceInterface getResourcePrototype() {
AbstractResource prototype = null;
try {
Class resourceClass = Class.forName(this.getClass().getName());
prototype = (AbstractResource) resourceClass.newInstance();
} catch (Throwable t) {
throw new RuntimeException("Errore in creazione prototipo " +
"Risorsa tipo '" + this.getType() + "'", t);
}
prototype.setId("");
prototype.setType(this.getType());
prototype.setDescr("");
prototype.setMainGroup("");
prototype.setMasterFileName("");
prototype.setCategories(new ArrayList<Category>());
prototype.setFolder(this.getFolder());
prototype.setBaseURL(this.getBaseURL());
prototype.setBaseDiskRoot(this.getBaseDiskRoot());
prototype.setProtectedBaseDiskRoot(this.getProtectedBaseDiskRoot());
prototype.setProtectedBaseURL(this.getProtectedBaseURL());
prototype.setAllowedExtensions(this.getAllowedExtensions());
prototype.setInstanceHelper(this.getInstanceHelper());
return prototype;
}
/**
* Restituisce la classe dom (necessaria per la generazione dell'xml della risorsa)
* preparata con gli attributi base della risorsa.
* @return La classe dom preparata con gli attributi base della risorsa.
*/
protected ResourceDOM getResourceDOM() {
ResourceDOM resourceDom = this.getNewResourceDOM();
resourceDom.setTypeCode(this.getType());
resourceDom.setId(this.getId());
resourceDom.setDescr(this.getDescr());
resourceDom.setMainGroup(this.getMainGroup());
resourceDom.setMasterFileName(this.getMasterFileName());
if (null != this.getCategories()) {
for (int i=0; i<this.getCategories().size(); i++) {
Category cat = (Category) this.getCategories().get(i);
resourceDom.addCategory(cat.getCode());
}
}
return resourceDom;
}
protected ResourceDOM getNewResourceDOM() {
return new ResourceDOM();
}
/**
* Restituisce il path assoluto su disco del folder contenitore
* dei file delle istanze relative alla risorsa specificata.
* Questo path è necessario al salvataggio o alla rimozione
* dei file associati ad ogni istanza della risorse.
* @return Il path assoluto su disco completo.
*/
@Override
public String getDiskFolder() {
StringBuffer diskFolder = new StringBuffer();
if (!Group.FREE_GROUP_NAME.equals(this.getMainGroup())) {
//RISORSA PROTETTA
diskFolder.append(this.getProtectedBaseDiskRoot());
} else {
//RISORSA LIBERA
diskFolder.append(this.getBaseDiskRoot());
}
String folder = this.getFolder();
if (!diskFolder.toString().endsWith("\\")
&& (!folder.startsWith("\\") || !folder.startsWith("/"))) {
diskFolder.append(File.separator);
}
diskFolder.append(folder);
if (!Group.FREE_GROUP_NAME.equals(this.getMainGroup())) {
//RISORSA PROTETTA
diskFolder.append(this.getMainGroup() + File.separator);
}
return diskFolder.toString();
}
/**
* Restitituisce il nome file corretto da utilizzare
* per i salvataggi di istanze risorse all'interno del fileSystem.
* @param masterFileName Il nome del file principale.
* @return Il nome file corretto.
* @deprecated from jAPS 2.1
*/
protected String getRevisedInstanceFileName(String masterFileName) {
String instanceFileName = masterFileName.replaceAll("[^ _.a-zA-Z0-9]", "");
instanceFileName = instanceFileName.trim().replace(' ', '_');
return instanceFileName;
}
/**
* Restituisce il path del file relativo all'istanza.
* @return Il path del file relativo all'istanza.
*/
protected String getUrlPath(ResourceInstance instance) {
if (null == instance) return null;
StringBuffer urlPath = null;
if (!Group.FREE_GROUP_NAME.equals(this.getMainGroup())) {
//PATH di richiamo della servlet di autorizzazione
//Sintassi /<RES_ID>/<SIZE>/<LANG_CODE>/
String DEF = "def";
urlPath = new StringBuffer(this.getProtectedBaseURL());
if (!urlPath.toString().endsWith("/")) urlPath.append("/");
urlPath.append(this.getId()).append("/");
if (instance.getSize() < 0) {
urlPath.append(DEF);
} else {
urlPath.append(instance.getSize());
}
urlPath.append("/");
if (instance.getLangCode() == null) {
urlPath.append(DEF);
} else {
urlPath.append(instance.getLangCode());
}
urlPath.append("/");
} else {
urlPath = new StringBuffer(this.getBaseURL());
if (!urlPath.toString().endsWith("/")) urlPath.append("/");
urlPath.append(this.getFolder());
if (!urlPath.toString().endsWith("/")) urlPath.append("/");
urlPath.append(instance.getFileName());
}
return urlPath.toString();
}
protected IResourceInstanceHelper getInstanceHelper() {
return _instanceHelper;
}
public void setInstanceHelper(IResourceInstanceHelper instanceHelper) {
this._instanceHelper = instanceHelper;
}
private String _id;
private String _typeCode;
private String _descr;
private String _mainGroup;
private String _masterFileName;
private List<Category> _categories;
private String _folder;
private String _baseURL;
private String _baseDiskRoot;
private String _protectedBaseDiskRoot;
private String _protectedBaseURL;
private String _allowedExtensions;
private IResourceInstanceHelper _instanceHelper;
}