[jboss-svn-commits] JBL Code SVN: r32376 - in labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples: common/business and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sat Apr 3 12:39:28 EDT 2010
Author: ge0ffrey
Date: 2010-04-03 12:39:27 -0400 (Sat, 03 Apr 2010)
New Revision: 32376
Added:
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/persistence/NurseRosteringEvaluatorHelper.java
Modified:
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/app/CommonApp.java
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/business/SolutionBusiness.java
Log:
nurse rostering: evaluator helper
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/app/CommonApp.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/app/CommonApp.java 2010-04-03 14:30:32 UTC (rev 32375)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/app/CommonApp.java 2010-04-03 16:39:27 UTC (rev 32376)
@@ -1,13 +1,10 @@
package org.drools.planner.examples.common.app;
-import java.io.File;
-
import org.drools.planner.core.Solver;
import org.drools.planner.examples.common.business.SolutionBusiness;
import org.drools.planner.examples.common.persistence.AbstractSolutionExporter;
import org.drools.planner.examples.common.persistence.AbstractSolutionImporter;
import org.drools.planner.examples.common.persistence.SolutionDao;
-import org.drools.planner.examples.common.persistence.XstreamSolutionDaoImpl;
import org.drools.planner.examples.common.swingui.SolutionPanel;
import org.drools.planner.examples.common.swingui.WorkflowFrame;
@@ -17,13 +14,11 @@
public abstract class CommonApp extends LoggingMain {
private WorkflowFrame workflowFrame;
- private SolutionDao solutionDao;
private SolutionBusiness solutionBusiness;
public CommonApp() {
- solutionDao = createSolutionDao();
solutionBusiness = createSolutionBusiness();
- workflowFrame = new WorkflowFrame(solutionBusiness, createSolutionPanel(), solutionDao.getDirName());
+ workflowFrame = new WorkflowFrame(solutionBusiness, createSolutionPanel(), solutionBusiness.getDirName());
}
public void init() {
@@ -31,12 +26,13 @@
workflowFrame.setVisible(true);
}
- protected SolutionBusiness createSolutionBusiness() {
+ public SolutionBusiness createSolutionBusiness() {
+ SolutionDao solutionDao = createSolutionDao();
SolutionBusiness solutionBusiness = new SolutionBusiness();
solutionBusiness.setSolutionDao(solutionDao);
solutionBusiness.setImporter(createSolutionImporter());
solutionBusiness.setExporter(createSolutionExporter());
- solutionBusiness.setDataDir(solutionDao.getDataDir());
+ solutionBusiness.updateDataDirs();
solutionBusiness.setSolver(createSolver());
return solutionBusiness;
}
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/business/SolutionBusiness.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/business/SolutionBusiness.java 2010-04-03 14:30:32 UTC (rev 32375)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/business/SolutionBusiness.java 2010-04-03 16:39:27 UTC (rev 32376)
@@ -62,6 +62,14 @@
this.exporter = exporter;
}
+ public File getDataDir() {
+ return solutionDao.getDataDir();
+ }
+
+ public String getDirName() {
+ return solutionDao.getDirName();
+ }
+
public boolean hasImporter() {
return importer != null;
}
@@ -70,26 +78,26 @@
return exporter != null;
}
- public void setDataDir(File dataDir) {
+ public void updateDataDirs() {
if (hasImporter()) {
- importDataDir = new File(dataDir, "input");
+ importDataDir = new File(getDataDir(), "input");
if (!importDataDir.exists()) {
throw new IllegalStateException("The directory importDataDir (" + importDataDir.getAbsolutePath()
+ ") does not exist. The working directory should be set to drools-planner-examples.");
}
}
- unsolvedDataDir = new File(dataDir, "unsolved");
+ unsolvedDataDir = new File(getDataDir(), "unsolved");
if (!unsolvedDataDir.exists()) {
throw new IllegalStateException("The directory unsolvedDataDir (" + unsolvedDataDir.getAbsolutePath()
+ ") does not exist. The working directory should be set to drools-planner-examples.");
}
- solvedDataDir = new File(dataDir, "solved");
+ solvedDataDir = new File(getDataDir(), "solved");
if (!solvedDataDir.exists()) {
throw new IllegalStateException("The directory solvedDataDir (" + solvedDataDir.getAbsolutePath()
+ ") does not exist. The working directory should be set to drools-planner-examples.");
}
if (hasExporter()) {
- exportDataDir = new File(dataDir, "output");
+ exportDataDir = new File(getDataDir(), "output");
if (!exportDataDir.exists()) {
throw new IllegalStateException("The directory exportDataDir (" + exportDataDir.getAbsolutePath()
+ ") does not exist. The working directory should be set to drools-planner-examples.");
Added: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/persistence/NurseRosteringEvaluatorHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/persistence/NurseRosteringEvaluatorHelper.java (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/persistence/NurseRosteringEvaluatorHelper.java 2010-04-03 16:39:27 UTC (rev 32376)
@@ -0,0 +1,94 @@
+package org.drools.planner.examples.nurserostering.persistence;
+
+import java.io.File;
+import java.io.FilterOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import org.apache.commons.io.IOUtils;
+import org.drools.planner.examples.common.business.SolutionBusiness;
+import org.drools.planner.examples.nurserostering.app.NurseRosteringApp;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class NurseRosteringEvaluatorHelper {
+
+ private static final String INPUT_FILE_PREFIX = "long01";
+ private static final String OUTPUT_FILE_SUFFIX = "_tmp";
+
+ public static void main(String[] args) {
+ NurseRosteringApp nurseRosteringApp = new NurseRosteringApp();
+ SolutionBusiness solutionBusiness = nurseRosteringApp.createSolutionBusiness();
+ Process process = null;
+ try {
+ File inputFile = new File(solutionBusiness.getImportDataDir(),
+ INPUT_FILE_PREFIX + ".xml").getCanonicalFile();
+ File outputFile = new File(solutionBusiness.getExportDataDir(),
+ INPUT_FILE_PREFIX + OUTPUT_FILE_SUFFIX + ".xml").getCanonicalFile();
+ File evaluatorDir = new File("local/competition/nurserostering/");
+ String command = "java -jar evaluator.jar " + inputFile.getAbsolutePath()
+ + " " + outputFile.getAbsolutePath();
+ process = Runtime.getRuntime().exec(command, null, evaluatorDir);
+ EvaluatorSummaryFilterOutputStream out = new EvaluatorSummaryFilterOutputStream();
+ IOUtils.copy(process.getInputStream(), out);
+ IOUtils.copy(process.getErrorStream(), System.err);
+ out.writeResults();
+ } catch (IOException e) {
+ throw new IllegalStateException(e);
+ } finally {
+ if (process != null) {
+ process.destroy();
+ }
+ }
+ }
+
+ private static class EvaluatorSummaryFilterOutputStream extends FilterOutputStream {
+
+ private StringBuilder lineBuffer = new StringBuilder(120);
+ private Map<String, Integer> excessMap;
+ private static final String EXCESS_PATTERN = "excess = ";
+
+ private EvaluatorSummaryFilterOutputStream() {
+ super(System.out);
+ excessMap = new LinkedHashMap<String, Integer>();
+ }
+
+ @Override
+ public void write(int b) throws IOException {
+ super.write(b);
+ if (b == '\n') {
+ processLine(lineBuffer.toString());
+ lineBuffer.delete(0, lineBuffer.length());
+ } else {
+ lineBuffer.append((char) b);
+ }
+ }
+
+ private void processLine(String line) {
+ int excessIndex = line.indexOf(EXCESS_PATTERN);
+ if (excessIndex >= 0) {
+ String key = line.substring(0, excessIndex);
+ int value = Integer.parseInt(line.substring(excessIndex).replaceAll("excess = (\\d+) .*", "$1"));
+ Integer count = excessMap.get(key);
+ if (count == null) {
+ count = value;
+ } else {
+ count += value;
+ }
+ excessMap.put(key, count);
+ }
+ }
+
+ public void writeResults() {
+ System.out.println("EvaluatorHelper results");
+ System.out.println("=======================");
+ for (Map.Entry<String, Integer> entry : excessMap.entrySet()) {
+ System.out.println(entry.getKey() + " count = " + entry.getValue());
+ }
+ }
+ }
+
+}
More information about the jboss-svn-commits
mailing list