package com.idega.block.importer.presentation;
import java.io.File;
import java.rmi.RemoteException;
import java.util.Collection;
import java.util.Iterator;
import javax.ejb.FinderException;
import com.idega.block.importer.business.ImportBusiness;
import com.idega.block.importer.data.ImportFileClass;
import com.idega.block.importer.data.ImportFileClassHome;
import com.idega.block.importer.data.ImportHandler;
import com.idega.block.importer.data.ImportHandlerHome;
import com.idega.business.IBOLookup;
import com.idega.business.IBOLookupException;
import com.idega.data.IDOLookup;
import com.idega.data.IDOLookupException;
import com.idega.idegaweb.IWResourceBundle;
import com.idega.presentation.ExceptionWrapper;
import com.idega.presentation.IWContext;
import com.idega.presentation.Table;
import com.idega.presentation.text.Paragraph;
import com.idega.presentation.text.Text;
import com.idega.presentation.ui.Form;
import com.idega.presentation.ui.SubmitButton;
import com.idega.presentation.ui.TextInput;
/**
* Lets the user see and configure the automatic import configurations
* Copyright: Copyright (c) 2004
* Company: idega software
* @author Joakim@idega.is
*/
public class AutoImporter extends com.idega.presentation.Block {
private static final String PARAMETER_IMPORT_HANDLER = "im_imh";
private static final String PARAMETER_IMPORT_FILE = "im_imf";
private static final String PARAMETER_IMPORT_FOLDER = "im_fo";
private static String PARAM_UPDATE="im_up";
private static String PARAM_DELETE="im_de";
private IWContext _iwc;
private IWResourceBundle iwrb;
private String errorMessage = "";
public final static String IW_BUNDLE_IDENTIFIER = "com.idega.block.importer";
/**
* @see com.idega.presentation.PresentationObject#getBundleIdentifier()
*/
public String getBundleIdentifier() {
return IW_BUNDLE_IDENTIFIER;
}
public void main(IWContext iwc) throws Exception{
this._iwc = iwc;
this.iwrb = this.getResourceBundle(iwc);
this.errorMessage = "";
handleAction(iwc);
Form form = new Form();
Table table = new Table(3, 3);
//Create the config area, to set the handler, file type and folder
try {
Text importHandlerText = new Text(this.iwrb.getLocalizedString("importer.import.handler", "Import handler : "));
importHandlerText.setBold();
table.add(importHandlerText, 1, 1);
table.add(getImportBusiness(iwc).getImportHandlers(iwc, PARAMETER_IMPORT_HANDLER), 2, 1);
Text fileType = new Text(this.iwrb.getLocalizedString("importer.import.filetype", "File type : "));
fileType.setBold();
table.add(fileType, 1, 2);
table.add(getImportBusiness(iwc).getImportFileClasses(iwc, PARAMETER_IMPORT_FILE), 2, 2);
Text importFolder = new Text(this.iwrb.getLocalizedString("importer.import.folder", "Import folder : "));
importFolder.setBold();
table.add(importFolder, 1, 3);
TextInput importFolderInput = new TextInput(PARAMETER_IMPORT_FOLDER);
//TODO (JJ) add logic to fetch folder info
table.add(importFolderInput,2,3);
SubmitButton update = new SubmitButton(PARAM_UPDATE,this.iwrb.getLocalizedString("importer.update", "Update"));
update.setAsImageButton(true);
table.add(update, 3, 3);
} catch (RemoteException e) {
add(new ExceptionWrapper(e, this));
e.printStackTrace();
}
form.add(table);
form.add(new Text(this.errorMessage));
form.add(new Paragraph());
form.add(getAllAutomaticUpdates(iwc));
add(form);
}
/**
* Returns a table with all automatic updates listed in it
*
* @param iwc
* @return
*/
private Table getAllAutomaticUpdates(IWContext iwc) {
ImportHandlerHome importHandlerHome;
Table table = null;
try {
importHandlerHome = (ImportHandlerHome)IDOLookup.getHome(ImportHandler.class);
ImportFileClassHome importFileClassHome = (ImportFileClassHome)IDOLookup.getHome(ImportFileClass.class);
Collection coll = importHandlerHome.findAllAutomaticUpdates();
//If we have some automatic poller, display them
if(coll.size()>0){
int row = 2;
table = new Table(4,coll.size()+1);
//Create the headers
Text importHandlerText = new Text(this.iwrb.getLocalizedString("importer.import.handler", "Import handler : "));
importHandlerText.setBold();
table.add(importHandlerText, 1, 1);
Text fileType = new Text(this.iwrb.getLocalizedString("importer.import.filetype", "File type : "));
fileType.setBold();
table.add(fileType, 2, 1);
Text importFolder = new Text(this.iwrb.getLocalizedString("importer.import.folder", "Import folder : "));
importFolder.setBold();
table.add(importFolder, 3, 1);
Iterator iter = coll.iterator();
//The list of all pollers
while(iter.hasNext()){
ImportHandler importHandler = (ImportHandler)iter.next();
table.add(importHandler.getName(),1,row);
ImportFileClass importFileClass = importFileClassHome.findByClassName(importHandler.getAutoImpFileType());
table.add(importFileClass.getName(),2,row);
table.add(importHandler.getAutoImpFolder(),3,row);
SubmitButton delButton = new SubmitButton(
this.iwrb.getLocalizedString("importer.delete", "Delete"),PARAM_DELETE,importHandler.getClassName());
delButton.setAsImageButton(true);
table.add(delButton,4,row);
row++;
}
}else{
table = new Table(1,1);
table.add(new Text("No automatic imports specified"));
}
} catch (IDOLookupException e) {
add(new ExceptionWrapper(e, this));
e.printStackTrace();
} catch (FinderException e) {
add(new ExceptionWrapper(e, this));
e.printStackTrace();
}
return table;
}
/**
* @param iwc
*/
private void handleAction(IWContext iwc) {
// printParams(iwc);
if(iwc.isParameterSet(PARAM_UPDATE)){
doUpdate(iwc);
} else if(iwc.isParameterSet(PARAM_DELETE)){
System.out.println("Would delete "+iwc.getParameter(PARAM_DELETE));
doDelete(iwc.getParameter(PARAM_DELETE));
}
}
// private void printParams(IWContext iwc){
// Enumeration enum = iwc.getParameterNames();
// while(enum.hasMoreElements()){
// String param = (String)enum.nextElement();
// System.out.println("Parameter "+param+" "+iwc.getParameter(param));
// }
// }
private void doDelete(String importHandlerString){
// String importHandlerString = iwc.getParameter(PARAM_DELETE);
com.idega.block.importer.IWBundleStarter.shutdown(importHandlerString);
ImportHandlerHome ImportHandlerHome;
try {
ImportHandlerHome = (ImportHandlerHome)IDOLookup.getHome(ImportHandler.class);
ImportHandler importHandler = ImportHandlerHome.findByClassName(importHandlerString);
importHandler.setAutoImpFileType(null);
importHandler.setAutoImpFolder(null);
importHandler.store();
} catch (IDOLookupException e) {
add(new ExceptionWrapper(e, this));
e.printStackTrace();
} catch (FinderException e) {
add(new ExceptionWrapper(e, this));
e.printStackTrace();
}
}
/**
* @param iwc
*/
private void doUpdate(IWContext iwc) {
if(iwc.isParameterSet(PARAMETER_IMPORT_HANDLER)){
String importHandlerString = iwc.getParameter(PARAMETER_IMPORT_HANDLER);
String importFolderString = iwc.getParameter(PARAMETER_IMPORT_FOLDER);
if(!new File(importFolderString).exists()){
this.errorMessage = this.iwrb.getLocalizedString("importer.FolderNotFoundPleaseSpecifyValidFolder", "Folder not found. Please specify valid folder");
return;
}
//Could move to business maybe
doDelete(importHandlerString);
ImportHandlerHome importHandlerHome;
try {
importHandlerHome = (ImportHandlerHome)IDOLookup.getHome(ImportHandler.class);
ImportHandler importHandler = importHandlerHome.findByClassName(importHandlerString);
importHandler.setAutoImpFileType(iwc.getParameter(PARAMETER_IMPORT_FILE));
importHandler.setAutoImpFolder(importFolderString);
importHandler.store();
com.idega.block.importer.IWBundleStarter.addPoller(importHandler);
} catch (IDOLookupException e) {
add(new ExceptionWrapper(e, this));
e.printStackTrace();
} catch (FinderException e) {
add(new ExceptionWrapper(e, this));
e.printStackTrace();
} catch (IBOLookupException e) {
add(new ExceptionWrapper(e, this));
e.printStackTrace();
} catch (ClassNotFoundException e) {
add(new ExceptionWrapper(e, this));
e.printStackTrace();
}
}
}
public ImportBusiness getImportBusiness(IWContext iwc) throws RemoteException {
return (ImportBusiness) IBOLookup.getServiceInstance(iwc, ImportBusiness.class);
}
}