/**
SpagoBI, the Open Source Business Intelligence suite
Copyright (C) 2012 Engineering Ingegneria Informatica S.p.A. - SpagoBI Competency Center
This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this file,
You can obtain one at http://mozilla.org/MPL/2.0/.
**/
package it.eng.spagobi.studio.documentcomposition.editors.model.documentcomposition.bo;
import it.eng.spagobi.studio.documentcomposition.Activator;
import it.eng.spagobi.studio.documentcomposition.editors.model.documentcomposition.Document;
import it.eng.spagobi.studio.documentcomposition.editors.model.documentcomposition.DocumentComposition;
import it.eng.spagobi.studio.documentcomposition.editors.model.documentcomposition.DocumentsConfiguration;
import it.eng.spagobi.studio.documentcomposition.editors.model.documentcomposition.Parameter;
import it.eng.spagobi.studio.documentcomposition.editors.model.documentcomposition.Parameters;
import it.eng.spagobi.studio.documentcomposition.editors.model.documentcomposition.Style;
import it.eng.spagobi.studio.documentcomposition.editors.model.documentcomposition.metadata.MetadataDocument;
import it.eng.spagobi.studio.documentcomposition.editors.model.documentcomposition.metadata.MetadataDocumentComposition;
import it.eng.spagobi.studio.documentcomposition.editors.model.documentcomposition.metadata.MetadataParameter;
import it.eng.spagobi.studio.documentcomposition.util.XmlTemplateGenerator;
import java.util.Iterator;
import java.util.Vector;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
public class ModelBO {
/** create the DocumentCOmposition model by reading the file: the documentCOmposition model will contain everything that will be mapped on the template on saving action
*
* @param file
* @return
* @throws CoreException
*/
public DocumentComposition createModel(IFile file) throws CoreException{
// read the XML File
DocumentComposition documentComposition = XmlTemplateGenerator.readXml(file);
if(documentComposition.getDocumentsConfiguration()==null){
documentComposition.setDocumentsConfiguration(new DocumentsConfiguration());
}
return documentComposition;
}
public void saveModel(DocumentComposition documentComposition){
Activator.getDefault().setDocumentComposition(documentComposition);
}
public DocumentComposition getModel(){
return Activator.getDefault().getDocumentComposition();
}
/** update the model with a new document!
*
*/
public void addNewDocumentToModel(MetadataDocument _metadataDocument, Style style){
DocumentComposition documentComposition=getModel();
DocumentsConfiguration documentsConfiguration=documentComposition.getDocumentsConfiguration();
if(documentsConfiguration.getDocuments()==null){
documentsConfiguration.setDocuments(new Vector<Document>());
}
Document newDocument=new Document(_metadataDocument,style);
// add parameters
//addMetadataParametersToDocumentParameters(documentComposition, newDocument, _metadataDocument);
// newDocument.setSbiObjLabel(_metadataDocument.getLabel());
// newDocument.setLocalFileName(_metadataDocument.getLocalFileName());
// newDocument.setStyle(style);
// newDocument.setId(_metadataDocument.getIdMetadataDocument());
documentsConfiguration.getDocuments().add(newDocument);
saveModel(documentComposition);
}
/** delete a document from the model!
*
*/
public void deleteDocumentFromModel(MetadataDocument _metadataDocument){
DocumentComposition documentComposition=getModel();
DocumentsConfiguration documentsConfiguration=documentComposition.getDocumentsConfiguration();
Vector<Document> documents=documentsConfiguration.getDocuments();
boolean found=false;
for (Iterator iterator = documents.iterator(); iterator.hasNext() && found==false;) {
Document document = (Document) iterator.next();
//if(document.getSbiObjLabel().equals(_metadataDocument.getLabel())){
if(document.getId().equals(_metadataDocument.getLabel())){
documents.remove(document);
found=true;
}
}
saveModel(documentComposition);
}
/** delete a document from the model!
*
*/
public void deleteDocumentFromModel(Document documentToDelete){
DocumentComposition documentComposition=getModel();
DocumentsConfiguration documentsConfiguration=documentComposition.getDocumentsConfiguration();
Vector<Document> documents=documentsConfiguration.getDocuments();
boolean found=false;
for (Iterator iterator = documents.iterator(); iterator.hasNext() && found==false;) {
Document document = (Document) iterator.next();
//if(document.getSbiObjLabel().equals(_metadataDocument.getLabel())){
if(document.getSbiObjLabel().equals(documentToDelete.getSbiObjLabel())){
documents.remove(document);
found=true;
}
}
saveModel(documentComposition);
}
/** update the model with a new document!
*
*/
public void updateModelModifyDocument(MetadataDocument _metadataDocument, Style style){
DocumentComposition documentComposition=getModel();
DocumentsConfiguration documentsConfiguration=documentComposition.getDocumentsConfiguration();
Vector<Document> documents=documentsConfiguration.getDocuments();
if(documents!=null){
for (Iterator iterator = documents.iterator(); iterator.hasNext();) {
Document document = (Document) iterator.next();
// Modify the current document!
if(document.getId().equals(_metadataDocument.getLabel())){
document.setStyle(style);
}
}
saveModel(documentComposition);
}
}
/** insert into the model all parameters SpagoBi from contained documetn that are not already in template
* called when inserting a new Document and when loading the designer
* @param documentComposition
* @param document
* @param metadataDocument
*/
public void addMetadataParametersToDocumentParameters(DocumentComposition documentComposition, Document document, MetadataDocument metadataDocument){
// add to the model all parameters found in metadata, if not already present, because we have to put in template all inputs parameters
Vector<MetadataParameter> metaParameters = metadataDocument.getMetadataParameters();
for (Iterator iterator2 = metaParameters.iterator(); iterator2.hasNext();) {
MetadataParameter metadataParameter = (MetadataParameter) iterator2.next();
// if not alredy contained in document
if(!document.containsParameter(metadataParameter.getUrlName())){
Parameter par = new Parameter(documentComposition);
par.setSbiParLabel(metadataParameter.getUrlName());
par.setType("IN");
par.setNavigationName(metadataParameter.getUrlName());
//par.setNavigationName(metadataParameter.getUrlName());
// add the analaytical driver of the contained document to in parameters.
document.getParameters().getParameter().add(par);
}
}
return;
}
}