Salve a tutti.
Dunque io ho questo metodo:
private ArrayList deliveryModule() {
ArrayList actions = new ArrayList();
List results;
int i=0;
results = xmlData.getXPathContent("ActionPrint");
if (results.size() > 0) {
for (i=0;i<results.size();i++){
//System.out.println("[XMLController.deliveryModule] Stampante");
myLog.info("Stampante");
actions.add(new Stampante(this.xmlData, this.myLog, this.oSynchro));
}
}
Il costruttore di stampante è fatto così:
public Stampante(XMLData xml, Logger log, OOoSynchro oSyn) {
this.xmlData = xml;
this.oSynchro = oSyn;
this.myLog = log;
//this.fileToPrint = null;
}
Poi successivamente ho un metodo che mi crea un file ed invoca altri 2 metodi getOptions e doAction
Iterator it = actions.iterator();
while (it.hasNext()) {
this.myAction = (Delivery)it.next();
myAction.getOptions();
myAction.doAction();
}
che sono rispettivamente.
public void getOptions() throws DataException {
List results;
String[] data;
results = xmlData.getXPathContent("PrintQueue");
data = xmlData.getXPathValues(results);
if (data.length == 0) {
throw new DataException("[Stampante.getOptions] Non e` stata specificata nessuna coda di stampa");
} else {
this.printerName = data[0];
}
results = xmlData.getXPathContent("PrintCopies");
data = xmlData.getXPathValues(results);
if (data.length > 0) this.copies = new Integer(data[0]);
results = xmlData.getXPathContent("PrintProgram");
data = xmlData.getXPathValues(results);
if (data.length > 0) this.execProgram = data[0].toLowerCase();
results = xmlData.getXPathContent("PrintPathFile");
data = xmlData.getXPathValues(results);
if (data.length > 0) this.fileToPrint = data[0].toLowerCase();
}
public void doAction() throws DataException {
String myExtension = xmlData.getEstensione()[0];
//String myDocName = this.xmlData.getPathDoc() + this.xmlData.getNomeDoc() + "." + myExtension;
String myDocName = this.fileToPrint+ "." + myExtension;
System.out.println("Stampo il seguente file: "+ myDocName);
if (myExtension.equals("sxw"))
printSXW(myDocName);
else if (execProgram != null)
printWithExec(myDocName);
else {
if (myExtension.equals("pdf")) printPS(myDocName);
if (myExtension.equals("ps")) printPS(myDocName);
}
}
Il metodo che viene eseguito valutando l'if è printWithExec che è così.
private void printWithExec(String docName) throws DataException {
System.out.println("[PRINT-WithExcec] Nome file da stampare = "+docName);
ResourceBundle docOutBundle = ResourceBundle.getBundle("DocOutput");
System.out.println("[execProgram] "+this.execProgram);
String command = docOutBundle.getString(this.execProgram);
System.out.println("[command] "+command);
if (command.startsWith("C:\\")) {
command = "\"" + command + docName + "\" \"" + this.printerName + "\"";
System.out.println("[command] "+command);
} else {
command = command.replaceAll("queue", this.printerName);
command = command.replaceAll("InputFile", docName);
System.out.println("[command] "+command);
}
myLog.info("COMANDO " + command);
Runtime runtime = Runtime.getRuntime();
try {
Process process = runtime.exec(command);
process.waitFor();
} catch (Exception e) {
throw new DataException(e.getMessage());
}
}
private void printPS(String docName) throws DataException {
System.out.println("[PRINT-PS] Nome file da stampare = "+docName);
Bene adesso che ho messo tutte le carte in tavola vi spiego il mio problema.
Il ciclo del primo metodo ArrayDelivery, mi conta quanti tag "ActionPrint" ho nel file xml che passo, e li memorizza in una lista.
Il mio problema è che esegue per n volte (quelle rilevate dal ciclo) le operazioni sempre sullo stesso <tag> e non mi considera i tag successivi.
Dove sbaglio?
Spero di aver spiegato abbastanza bene il problema e che mi possiate aiutare
Grazie