[jboss-svn-commits] JBL Code SVN: r35675 - in labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples: cloudbalancing and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Oct 22 13:47:21 EDT 2010
Author: ge0ffrey
Date: 2010-10-22 13:47:21 -0400 (Fri, 22 Oct 2010)
New Revision: 35675
Added:
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/domain/
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/domain/CloudAssignment.java
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/domain/CloudBalance.java
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/domain/CloudComputer.java
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/domain/CloudProcess.java
Log:
new example: cloudbalancing domain code
Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/domain/CloudAssignment.java (from rev 35630, labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/Assignment.java)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/domain/CloudAssignment.java (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/domain/CloudAssignment.java 2010-10-22 17:47:21 UTC (rev 35675)
@@ -0,0 +1,109 @@
+/*
+ * Copyright 2010 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.drools.planner.examples.cloudbalancing.domain;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import org.apache.commons.lang.builder.CompareToBuilder;
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.drools.planner.examples.common.domain.AbstractPersistable;
+
+/**
+ * @author Geoffrey De Smet
+ */
+ at XStreamAlias("CloudAssignment")
+public class CloudAssignment extends AbstractPersistable implements Comparable<CloudAssignment> {
+
+ private CloudProcess cloudProcess;
+
+ // Changed by moves, between score calculations.
+ private CloudComputer cloudComputer;
+
+ public CloudProcess getCloudProcess() {
+ return cloudProcess;
+ }
+
+ public void setCloudProcess(CloudProcess cloudProcess) {
+ this.cloudProcess = cloudProcess;
+ }
+
+ public CloudComputer getCloudComputer() {
+ return cloudComputer;
+ }
+
+ public void setCloudComputer(CloudComputer cloudComputer) {
+ this.cloudComputer = cloudComputer;
+ }
+
+ public String getLabel() {
+ return cloudProcess.getName();
+ }
+
+ public int compareTo(CloudAssignment other) {
+ return new CompareToBuilder()
+ .append(cloudProcess, other.cloudProcess)
+ .append(cloudComputer, other.cloudComputer)
+ .toComparison();
+ }
+
+ public CloudAssignment clone() {
+ CloudAssignment clone = new CloudAssignment();
+ clone.id = id;
+ clone.cloudProcess = cloudProcess;
+ clone.cloudComputer = cloudComputer;
+ return clone;
+ }
+
+ /**
+ * The normal methods {@link #equals(Object)} and {@link #hashCode()} cannot be used because the rule engine already
+ * requires them (for performance in their original state).
+ * @see #solutionHashCode()
+ */
+ public boolean solutionEquals(Object o) {
+ if (this == o) {
+ return true;
+ } else if (o instanceof CloudAssignment) {
+ CloudAssignment other = (CloudAssignment) o;
+ return new EqualsBuilder()
+ .append(id, other.id)
+ .append(cloudProcess, other.cloudProcess)
+ .append(cloudComputer, other.cloudComputer)
+ .isEquals();
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * The normal methods {@link #equals(Object)} and {@link #hashCode()} cannot be used because the rule engine already
+ * requires them (for performance in their original state).
+ * @see #solutionEquals(Object)
+ */
+ public int solutionHashCode() {
+ return new HashCodeBuilder()
+ .append(id)
+ .append(cloudProcess)
+ .append(cloudProcess)
+ .toHashCode();
+ }
+
+ @Override
+ public String toString() {
+ return cloudProcess + "->" + cloudComputer;
+ }
+
+}
Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/domain/CloudBalance.java (from rev 35630, labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/NurseRoster.java)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/domain/CloudBalance.java (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/domain/CloudBalance.java 2010-10-22 17:47:21 UTC (rev 35675)
@@ -0,0 +1,143 @@
+/*
+ * Copyright 2010 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.drools.planner.examples.cloudbalancing.domain;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.drools.planner.core.score.HardAndSoftScore;
+import org.drools.planner.core.score.Score;
+import org.drools.planner.core.solution.Solution;
+import org.drools.planner.examples.common.domain.AbstractPersistable;
+
+/**
+ * @author Geoffrey De Smet
+ */
+ at XStreamAlias("CloudBalance")
+public class CloudBalance extends AbstractPersistable implements Solution {
+
+ private List<CloudComputer> cloudComputerList;
+ private List<CloudProcess> cloudProcessList;
+
+ private List<CloudAssignment> cloudAssignmentList;
+
+ private HardAndSoftScore score;
+
+ public List<CloudComputer> getCloudComputerList() {
+ return cloudComputerList;
+ }
+
+ public void setCloudComputerList(List<CloudComputer> cloudComputerList) {
+ this.cloudComputerList = cloudComputerList;
+ }
+
+ public List<CloudProcess> getCloudProcessList() {
+ return cloudProcessList;
+ }
+
+ public void setCloudProcessList(List<CloudProcess> cloudProcessList) {
+ this.cloudProcessList = cloudProcessList;
+ }
+
+ public List<CloudAssignment> getCloudAssignmentList() {
+ return cloudAssignmentList;
+ }
+
+ public void setCloudAssignmentList(List<CloudAssignment> cloudAssignmentList) {
+ this.cloudAssignmentList = cloudAssignmentList;
+ }
+
+ public HardAndSoftScore getScore() {
+ return score;
+ }
+
+ public void setScore(Score score) {
+ this.score = (HardAndSoftScore) score;
+ }
+
+
+ public boolean isInitialized() {
+ return (cloudAssignmentList != null);
+ }
+
+ public Collection<? extends Object> getFacts() {
+ List<Object> facts = new ArrayList<Object>();
+ facts.addAll(cloudComputerList);
+ facts.addAll(cloudProcessList);
+
+ if (isInitialized()) {
+ facts.addAll(cloudAssignmentList);
+ }
+ return facts;
+ }
+
+ /**
+ * Clone will only deep copy the {@link #cloudAssignmentList}.
+ */
+ public CloudBalance cloneSolution() {
+ CloudBalance clone = new CloudBalance();
+ clone.id = id;
+ clone.cloudComputerList = cloudComputerList;
+ clone.cloudProcessList = cloudProcessList;
+ List<CloudAssignment> clonedCloudAssignmentList = new ArrayList<CloudAssignment>(
+ cloudAssignmentList.size());
+ for (CloudAssignment cloudAssignment : cloudAssignmentList) {
+ CloudAssignment clonedCloudAssignment = cloudAssignment.clone();
+ clonedCloudAssignmentList.add(clonedCloudAssignment);
+ }
+ clone.cloudAssignmentList = clonedCloudAssignmentList;
+ clone.score = score;
+ return clone;
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (id == null || !(o instanceof CloudBalance)) {
+ return false;
+ } else {
+ CloudBalance other = (CloudBalance) o;
+ if (cloudAssignmentList.size() != other.cloudAssignmentList.size()) {
+ return false;
+ }
+ for (Iterator<CloudAssignment> it = cloudAssignmentList.iterator(), otherIt = other.cloudAssignmentList.iterator(); it.hasNext();) {
+ CloudAssignment cloudAssignment = it.next();
+ CloudAssignment otherCloudAssignment = otherIt.next();
+ // Notice: we don't use equals()
+ if (!cloudAssignment.solutionEquals(otherCloudAssignment)) {
+ return false;
+ }
+ }
+ return true;
+ }
+ }
+
+ public int hashCode() {
+ HashCodeBuilder hashCodeBuilder = new HashCodeBuilder();
+ for (CloudAssignment cloudAssignment : cloudAssignmentList) {
+ // Notice: we don't use hashCode()
+ hashCodeBuilder.append(cloudAssignment.solutionHashCode());
+ }
+ return hashCodeBuilder.toHashCode();
+ }
+
+}
Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/domain/CloudComputer.java (from rev 35630, labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/Employee.java)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/domain/CloudComputer.java (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/domain/CloudComputer.java 2010-10-22 17:47:21 UTC (rev 35675)
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2010 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.drools.planner.examples.cloudbalancing.domain;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import org.apache.commons.lang.builder.CompareToBuilder;
+import org.drools.planner.examples.common.domain.AbstractPersistable;
+
+/**
+ * @author Geoffrey De Smet
+ */
+ at XStreamAlias("CloudComputer")
+public class CloudComputer extends AbstractPersistable implements Comparable<CloudComputer> {
+
+ private String name;
+ private int cpuPower; // in megahertz
+ private int memory; // in megabyte RAM
+ private int networkBandwidth; // in megabyte per hour
+ private int cost; // in euro per hour
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getCpuPower() {
+ return cpuPower;
+ }
+
+ public void setCpuPower(int cpuPower) {
+ this.cpuPower = cpuPower;
+ }
+
+ public int getMemory() {
+ return memory;
+ }
+
+ public void setMemory(int memory) {
+ this.memory = memory;
+ }
+
+ public int getNetworkBandwidth() {
+ return networkBandwidth;
+ }
+
+ public void setNetworkBandwidth(int networkBandwidth) {
+ this.networkBandwidth = networkBandwidth;
+ }
+
+ public int getCost() {
+ return cost;
+ }
+
+ public void setCost(int cost) {
+ this.cost = cost;
+ }
+
+ public int compareTo(CloudComputer other) {
+ return new CompareToBuilder()
+ .append(name, other.name)
+ .toComparison();
+ }
+
+ @Override
+ public String toString() {
+ return name;
+ }
+
+}
Added: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/domain/CloudProcess.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/domain/CloudProcess.java (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/cloudbalancing/domain/CloudProcess.java 2010-10-22 17:47:21 UTC (rev 35675)
@@ -0,0 +1,77 @@
+/*
+ * Copyright 2010 JBoss Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.drools.planner.examples.cloudbalancing.domain;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import org.apache.commons.lang.builder.CompareToBuilder;
+import org.drools.planner.examples.common.domain.AbstractPersistable;
+
+/**
+ * @author Geoffrey De Smet
+ */
+ at XStreamAlias("CloudProcess")
+public class CloudProcess extends AbstractPersistable implements Comparable<CloudProcess> {
+
+ private String name;
+ private int minimalCpuPower; // in megahertz
+ private int minimalMemory; // in megabyte RAM
+ private int minimalNetworkBandwidth; // in megabyte per hour
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getMinimalCpuPower() {
+ return minimalCpuPower;
+ }
+
+ public void setMinimalCpuPower(int minimalCpuPower) {
+ this.minimalCpuPower = minimalCpuPower;
+ }
+
+ public int getMinimalMemory() {
+ return minimalMemory;
+ }
+
+ public void setMinimalMemory(int minimalMemory) {
+ this.minimalMemory = minimalMemory;
+ }
+
+ public int getMinimalNetworkBandwidth() {
+ return minimalNetworkBandwidth;
+ }
+
+ public void setMinimalNetworkBandwidth(int minimalNetworkBandwidth) {
+ this.minimalNetworkBandwidth = minimalNetworkBandwidth;
+ }
+
+ public int compareTo(CloudProcess other) {
+ return new CompareToBuilder()
+ .append(name, other.name)
+ .toComparison();
+ }
+
+ @Override
+ public String toString() {
+ return name;
+ }
+
+}
More information about the jboss-svn-commits
mailing list