⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 resourceassignmentcollectionimpl.java

📁 It is all about project scheduling. GanttProject is a tool for creating a project schedule by means
💻 JAVA
字号:
package net.sourceforge.ganttproject.task;import java.util.ArrayList;import java.util.Collections;import java.util.HashMap;import java.util.List;import java.util.Map;import net.sourceforge.ganttproject.resource.ProjectResource;import net.sourceforge.ganttproject.resource.ResourceManager;import net.sourceforge.ganttproject.roles.Role;class ResourceAssignmentCollectionImpl implements ResourceAssignmentCollection {    private final Map myAssignments = new HashMap();    private final TaskImpl myTask;    private ResourceManager myResourceManager;    public ResourceAssignmentCollectionImpl(TaskImpl task,            ResourceManager resourceManager) {        myTask = task;        myResourceManager = resourceManager;    }    private ResourceAssignmentCollectionImpl(            ResourceAssignmentCollectionImpl collection) {        myTask = collection.myTask;        ResourceAssignment[] assignments = collection.getAssignments();        for (int i = 0; i < assignments.length; i++) {            ResourceAssignment next = assignments[i];            ResourceAssignment copy = new ResourceAssignmentImpl(next                    .getResource());            copy.setLoad(next.getLoad());            copy.setCoordinator(next.isCoordinator());            copy.setRoleForAssignment(next.getRoleForAssignment());            addAssignment(copy);        }    }    public void clear() {        ResourceAssignment[] assignments = getAssignments();        for (int i = 0; i < assignments.length; i++) {            assignments[i].delete();        }    }    public ResourceAssignment[] getAssignments() {        return (ResourceAssignment[]) myAssignments.values().toArray(                new ResourceAssignment[myAssignments.size()]);    }    public ResourceAssignment getAssignment(ProjectResource resource) {        return (ResourceAssignment) myAssignments.get(resource);    }    public ResourceAssignmentMutator createMutator() {        return new ResourceAssignmentMutatorImpl();    }    ResourceAssignmentCollectionImpl copy() {        return new ResourceAssignmentCollectionImpl(this);    }    public ResourceAssignment addAssignment(ProjectResource resource) {        return auxAddAssignment(resource);    }    public void deleteAssignment(ProjectResource resource) {        myAssignments.remove(resource);    }    private ResourceAssignment auxAddAssignment(ProjectResource resource) {        final ResourceAssignment result = new ResourceAssignmentImpl(resource);        addAssignment(result);        return result;    }    private void addAssignment(ResourceAssignment assignment) {        myAssignments.put(assignment.getResource(), assignment);    }    /**      * Removes the assignments related to the given resource.     *       * @param resource Assigned resource     */    public void removeAssignment(ProjectResource resource) {        (new ResourceAssignmentImpl(resource)).delete();    }    private Task getTask() {        return myTask;    }    private class ResourceAssignmentImpl implements ResourceAssignment {        private ResourceAssignment myAssignmentToResource;        public ResourceAssignmentImpl(ProjectResource resource) {            myAssignmentToResource = resource.createAssignment(this);//            resource//                    .setAssignmentCollection(ResourceAssignmentCollectionImpl.this);        }        public Task getTask() {            return ResourceAssignmentCollectionImpl.this.getTask();        }        public ProjectResource getResource() {            return myAssignmentToResource.getResource();        }        public float getLoad() {            return myAssignmentToResource.getLoad();        }        // todo: transaction        public void setLoad(float load) {            myAssignmentToResource.setLoad(load);        }        /**         * Deletes all the assignments and all the related assignments         */        public void delete() {            ResourceAssignmentCollectionImpl.this                    .deleteAssignment(getResource());            myAssignmentToResource.delete();        }        public void setCoordinator(boolean responsible) {            myAssignmentToResource.setCoordinator(responsible);        }        public boolean isCoordinator() {            return myAssignmentToResource.isCoordinator();        }        public Role getRoleForAssignment() {            return myAssignmentToResource.getRoleForAssignment();        }        public void setRoleForAssignment(Role role) {            myAssignmentToResource.setRoleForAssignment(role);        }                public void setLineNumber(String lineNumber){        	myAssignmentToResource.setLineNumber(lineNumber);        }                public String getLineNumber(){        	return myAssignmentToResource.getLineNumber();        }        public String toString() {            return this.getResource().getName() + " -> "                    + this.getTask().getName();        }    }    private class ResourceAssignmentStub implements ResourceAssignment {        private final ProjectResource myResource;        private float myLoad;        private boolean myCoordinator;        private Role myRoleForAssignment;                private String myLineNumber;        public ResourceAssignmentStub(ProjectResource resource) {            myResource = resource;        }        public void setLineNumber(String lineNumber){        	myLineNumber=lineNumber;        }                public String getLineNumber(){        	return myLineNumber;	        }                public Task getTask() {            return ResourceAssignmentCollectionImpl.this.getTask();        }        public ProjectResource getResource() {            return myResource;        }        public float getLoad() {            return myLoad;        }        public void setLoad(float load) {            myLoad = load;        }        public void delete() {        }        public void deleteLocal() {        }        public void setCoordinator(boolean responsible) {            myCoordinator = responsible;        }        public boolean isCoordinator() {            return myCoordinator;        }        public Role getRoleForAssignment() {            return myRoleForAssignment;        }        public void setRoleForAssignment(Role role) {            myRoleForAssignment = role;        }        public String toString() {            return this.getResource().getName() + " -> "                    + this.getTask().getName();        }    }    private class ResourceAssignmentMutatorImpl implements            ResourceAssignmentMutator {        private Map myQueue = new HashMap();        public ResourceAssignment addAssignment(ProjectResource resource) {            ResourceAssignment result = new ResourceAssignmentStub(resource);            myQueue.put(resource, new MutationInfo(result, MutationInfo.ADD));            return result;        }        public void deleteAssignment(ProjectResource resource) {            MutationInfo info = (MutationInfo) myQueue.get(resource);            if (info == null) {                myQueue.put(resource, new MutationInfo(resource,                        MutationInfo.DELETE));            } else if (info.myOperation == MutationInfo.ADD) {                myQueue.remove(resource);            }        }        public void commit() {            List mutations = new ArrayList(myQueue.values());            Collections.sort(mutations);            for (int i = 0; i < mutations.size(); i++) {                MutationInfo next = (MutationInfo) mutations.get(i);                switch (next.myOperation) {                case MutationInfo.DELETE: {                    myAssignments.remove(next.myResource);                    break;                }                case MutationInfo.ADD: {                    ResourceAssignment result = auxAddAssignment(next.myResource);                    result.setLoad(next.myAssignment.getLoad());                    result.setCoordinator(next.myAssignment.isCoordinator());                    result.setRoleForAssignment(next.myAssignment                            .getRoleForAssignment());                }                default:                    break;                }            }        }    }    private static class MutationInfo implements Comparable {        static final int ADD = 0;        static final int DELETE = 1;        private final ResourceAssignment myAssignment;        private final int myOrder;        private static int ourOrder;        private int myOperation;        private final ProjectResource myResource;        public MutationInfo(ResourceAssignment assignment, int operation) {            myAssignment = assignment;            myOrder = ourOrder++;            myOperation = operation;            myResource = assignment.getResource();        }        public MutationInfo(ProjectResource resource, int operation) {            this.myAssignment = null;            this.myOrder = ourOrder++;            this.myOperation = operation;            this.myResource = resource;        }        public boolean equals(Object o) {            boolean result = o instanceof MutationInfo;            if (result) {                result = myAssignment.getResource().equals(                        ((MutationInfo) o).myAssignment.getResource());            }            return result;        }        public int compareTo(Object o) {            if (!(o instanceof MutationInfo)) {                throw new IllegalArgumentException();            }            return myOrder - ((MutationInfo) o).myOrder;        }    }    public void importData(ResourceAssignmentCollection assignmentCollection) {        if (myTask.isUnplugged()) {            ResourceAssignment[] assignments = assignmentCollection                    .getAssignments();            for (int i = 0; i < assignments.length; i++) {                ResourceAssignment next = assignments[i];                addAssignment(next);            }        } else {            ResourceAssignment[] assignments = assignmentCollection                    .getAssignments();            for (int i = 0; i < assignments.length; i++) {                ResourceAssignment next = assignments[i];                ProjectResource nextResource = next.getResource();                ProjectResource nextImportedResource = myResourceManager                        .getById(nextResource.getId());                if (nextImportedResource != null) {                    ResourceAssignment copy = new ResourceAssignmentImpl(                            nextImportedResource);                    copy.setLoad(next.getLoad());                    copy.setCoordinator(next.isCoordinator());                    copy.setRoleForAssignment(next.getRoleForAssignment());                    addAssignment(copy);                }            }        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -