001: package com.calipso.reportgenerator.reportmanager;
002:
003: import com.calipso.reportgenerator.reportdefinitions.ReportSourceDefinition;
004: import com.calipso.reportgenerator.common.ReportGeneratorConfiguration;
005: import com.calipso.reportgenerator.common.LanguageTraslator;
006: import com.calipso.reportgenerator.common.DefinitionInfo;
007: import com.calipso.reportgenerator.common.InfoException;
008: import com.calipso.reportgenerator.services.FileSystemResolver;
009:
010: import java.util.Map;
011: import java.util.Hashtable;
012: import java.io.Serializable;
013: import java.io.FileReader;
014:
015: import org.apache.commons.vfs.FileObject;
016: import org.apache.commons.vfs.FileSystemException;
017: import org.apache.commons.vfs.FileSystemManager;
018: import org.exolab.castor.xml.Unmarshaller;
019:
020: /**
021: * Repositorio de definiciones de orígenes de datos(DataSource)
022: */
023: public class ReportSourceDefinitionRepository extends Repository
024: implements Serializable {
025: private static CacheRepository cache;
026:
027: /**
028: * Recupera una definición desde un identificador
029: * @param id Identificador de la definición
030: * @return
031: * @throws InfoException
032: */
033: public ReportSourceDefinition loadFromID(String id)
034: throws InfoException {
035: Object object;
036: try {
037: object = super .load(id);
038: if (object != null) {
039: return (ReportSourceDefinition) object;
040: } else {
041: return null;
042: }
043: } catch (Exception e) {
044: throw new InfoException(LanguageTraslator.traslate("59"), e);
045: }
046: }
047:
048: /**
049: * Graba un report source definition
050: * @param reportSourceDefinition
051: * @throws InfoException Si no se pudo grabar la definición
052: */
053: public void save(ReportSourceDefinition reportSourceDefinition)
054: throws InfoException {
055: try {
056: super .save(reportSourceDefinition, reportSourceDefinition
057: .getId());
058: } catch (Exception e) {
059: throw new InfoException(LanguageTraslator.traslate("60"), e);
060: }
061: }
062:
063: /**
064: * Retorna una lista de todas las definiciones disponibles
065: * @return
066: */
067: public Map getAllDfefinitions() throws InfoException {
068: Map map = new Hashtable();
069: String fileName;
070: FileObject fileObject;
071:
072: try {
073: fileObject = getFileSystemManager().resolveFile(
074: getDirectoryName());
075: } catch (FileSystemException e) {
076: throw new InfoException(LanguageTraslator.traslate("212")
077: + ":" + getDirectoryName(), e);
078: }
079: try {
080: for (int i = 0; i < fileObject.getChildren().length; i++) {
081: fileName = fileObject.getChildren()[i].getName()
082: .getBaseName();
083: DefinitionInfo definitionInfo = new DefinitionInfo();
084: definitionInfo.setId(fileName);
085: try {
086: definitionInfo
087: .setDescription(new DefinitionTraslator(
088: (ReportSourceDefinition) load(fileName),
089: reportGeneratorConfiguration
090: .getLocaleLanguage(),
091: reportGeneratorConfiguration
092: .getCountry())
093: .getDescription());
094: } catch (Exception e) {
095: throw new InfoException(LanguageTraslator
096: .traslate("177")
097: + ":" + fileName, e);
098: }
099: map.put(fileName, definitionInfo);
100: }
101: } catch (Exception e) {
102: throw new InfoException(LanguageTraslator.traslate("213")
103: + ":" + getDirectoryName(), e);
104: }
105: return map;
106: }
107:
108: /**
109: * Devuelve el objeto cache del repositorio
110: * @return
111: */
112: public CacheRepository getCache() {
113: if (cache == null) {
114: cache = new CacheRepository("ReportSourceDefinition");
115: }
116: return cache;
117: }
118:
119: public void delete(String id) throws InfoException {
120: String fileName = id;
121: deleteFile(fileName);
122: getCache().delete(fileName);
123: }
124:
125: public Class getObjectClass() {
126: return ReportSourceDefinition.class;
127: }
128:
129: /**
130: * Inicializa el repositorio
131: * @param directoryName
132: * @param reportGeneratorConfiguration
133: */
134: public ReportSourceDefinitionRepository(String directoryName,
135: ReportGeneratorConfiguration reportGeneratorConfiguration) {
136: super (directoryName, reportGeneratorConfiguration);
137: }
138:
139: protected Object saveFromSourceFiles(
140: ReportGeneratorConfiguration reportGeneratorConfiguration,
141: String id) throws InfoException {
142: ReportSourceDefinition result = null;
143: try {
144: FileSystemManager fileSystemManager = FileSystemResolver
145: .getFileSystemManager(getReportGeneratorConfiguration());
146: FileObject fileObject = fileSystemManager
147: .resolveFile(getReportGeneratorConfiguration()
148: .getSourceReportSourceDefinitionsPath());
149: String fileName = id + ".xml";
150: result = (ReportSourceDefinition) Unmarshaller.unmarshal(
151: ReportSourceDefinition.class,
152: new FileReader(getReportGeneratorConfiguration()
153: .getSourceReportSourceDefinitionsPath()
154: + "/" + fileName));
155: save(result);
156: } catch (Exception e) {
157: throw new InfoException(LanguageTraslator.traslate("413"));
158: }
159: return result;
160: }
161:
162: /**
163: * Borra el repositorio
164: * @throws InfoException
165: */
166: public void deleteAll() throws InfoException {
167: getCache().deleteAll();
168: deleteAllFiles();
169: }
170:
171: }
|