[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