Package net.sourceforge.ganttproject.resource

Source Code of net.sourceforge.ganttproject.resource.HumanResourceManager$CustomPropertyDefinitionImpl

/*
* HumanResourceManager.java
*
* Created on 27. Mai 2003, 22:13
*/

package net.sourceforge.ganttproject.resource;

import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.EventListener;
import java.util.EventObject;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import net.sourceforge.ganttproject.CustomProperty;
import net.sourceforge.ganttproject.CustomPropertyDefinition;
import net.sourceforge.ganttproject.CustomPropertyHolder;
import net.sourceforge.ganttproject.CustomPropertyManager;
import net.sourceforge.ganttproject.GanttCalendar;
import net.sourceforge.ganttproject.calendar.GanttDaysOff;
import net.sourceforge.ganttproject.roles.Role;
import net.sourceforge.ganttproject.undo.GPUndoManager;

/**
* @author barmeier
*/
public class HumanResourceManager implements ResourceManager, CustomPropertyManager {

    private List myViews = new ArrayList();

    private List resources = new ArrayList();
   
    private int nextFreeId = 0;

    private final Role myDefaultRole;
   
    /* customFields maintains a list of custom field names
     * and their default values */
    private final Map customFields = new HashMap();

    private final List myListeners = new ArrayList();
   
    public HumanResourceManager(Role defaultRole) {
        myDefaultRole = defaultRole;
    }

    public HumanResource newHumanResource() {
        HumanResource result = new HumanResource(this);
        result.setRole(myDefaultRole);
        return result;
    }

    public ProjectResource create(String name, int i) {
        HumanResource hr = new HumanResource(name, i, this);
        hr.setRole(myDefaultRole);
        add(hr);
        return (hr);
    }

    public void add(ProjectResource resource) {
        if (resource.getId() == -1) {
            resource.setId(nextFreeId);
        }
        if (resource.getId() >= nextFreeId) {
            nextFreeId = resource.getId() + 1;
        }
        resources.add(resource);
        fireResourceAdded(resource);
    }

    public void addCustomField(CustomPropertyDefinition definition) {
      customFields.put(definition.getName(), definition);
     
      /* all the existant resources are added the new property field */
        Iterator it = resources.iterator();
        while (it.hasNext()) {
            ((HumanResource)it.next()).addCustomField(definition.getName(), definition.getDefaultValue());
        }
    }
   
    public boolean checkCustomField(String title){
      return customFields.containsKey(title);
    }
   
    public void removeCustomField(String title) {
      customFields.remove(title);
     
      /* the property field is removed from all the existant resources */
      Iterator it = resources.iterator();
      while (it.hasNext()) {
        ((HumanResource)it.next()).removeCustomField(title);
        }
    }
   
    public ProjectResource getById(int id) {
        // Linear search is not really efficent, but we dont have so many
        // resources !?
        ProjectResource pr = null;
        for (int i = 0; i < resources.size(); i++)
            if (((ProjectResource) resources.get(i)).getId() == id) {
                pr = (ProjectResource) resources.get(i);
                break;
            }
        return pr;
    }

    public List getResources() {
        return resources;
    }
   
    public ProjectResource[] getResourcesArray() {
        return (ProjectResource[]) resources.toArray(new ProjectResource[resources.size()]);
    }

    public void remove(ProjectResource resource) {
        fireResourcesRemoved(new ProjectResource[] { resource });
        resources.remove(resource);
    }

    public void remove(ProjectResource resource, GPUndoManager myUndoManager) {
        final ProjectResource res = resource;
        myUndoManager.undoableEdit("Delete Human OK", new Runnable() {
            public void run() {
                fireResourcesRemoved(new ProjectResource[] { res });
                resources.remove(res);
            }
        });
    }

    public void save(OutputStream target) {
    }

    public void clear() {
        fireCleanup();
        resources.clear();
    }

    public void addView(ResourceView view) {
        myViews.add(view);
    }

    private void fireResourceAdded(ProjectResource resource) {
        ResourceEvent e = new ResourceEvent(this, resource);
        for (Iterator i = myViews.iterator(); i.hasNext();) {
            ResourceView nextView = (ResourceView) i.next();
            nextView.resourceAdded(e);
        }
    }

    void fireResourceChanged(ProjectResource resource) {
        ResourceEvent e = new ResourceEvent(this, resource);
        for (Iterator i = myViews.iterator(); i.hasNext();) {
            ResourceView nextView = (ResourceView) i.next();
            nextView.resourceChanged(e);
        }
    }
   
    private void fireResourcesRemoved(ProjectResource[] resources) {
        ResourceEvent e = new ResourceEvent(this, resources);
        for (int i = 0; i < myViews.size(); i++) {
            ResourceView nextView = (ResourceView) myViews.get(i);
            nextView.resourcesRemoved(e);
        }
    }

    public void fireAssignmentsChanged(ProjectResource resource) {
        ResourceEvent e = new ResourceEvent(this, resource);
        for (Iterator i = myViews.iterator(); i.hasNext();) {
            ResourceView nextView = (ResourceView) i.next();
            nextView.resourceAssignmentsChanged(e);
        }
    }
   
    private void fireCleanup() {
        fireResourcesRemoved((ProjectResource[]) resources
                .toArray(new ProjectResource[resources.size()]));
    }

    /** Move up the resource number index */
    public void up(HumanResource hr) {
        int index =  resources.indexOf(hr);
        assert index>=0;
        resources.remove(index);
        resources.add(index - 1, hr);
        fireResourceChanged(hr);
    }

    /** Move down the resource number index */
    public void down(HumanResource hr) {
        int index =  resources.indexOf(hr);
        assert index>=0;
        resources.remove(index);
        resources.add(index + 1, hr);
        fireResourceChanged(hr);

    }

    public Map importData(ResourceManager resourceManager) {
        Map original2imported = new HashMap();
        if (resourceManager instanceof HumanResourceManager == false) {
            throw new IllegalArgumentException(
                    "I expect resource manager to be HumanResourceManager");
        }
        HumanResourceManager hrManager = (HumanResourceManager) resourceManager;
        List resources = hrManager.getResources();
        for (int i = 0; i < resources.size(); i++) {
            HumanResource next = (HumanResource) resources.get(i);
            importData(next, original2imported);
        }
        return original2imported;
    }

    private void importData(HumanResource next, Map original2imported) {
        HumanResource imported = (HumanResource) create(next.getName(),
                nextFreeId);
        if (next.getDaysOff() != null)
            for (int i = 0; i < next.getDaysOff().size(); i++)
                imported.addDaysOff((GanttDaysOff) ((GanttDaysOff) next
                        .getDaysOff().get(i)).clone());
        imported.setName(next.getName());
        imported.setDescription(next.getDescription());
        imported.setMail(next.getMail());
        imported.setPhone(next.getPhone());
        imported.setRole(next.getRole());
        List/*<CustomProperty>*/ customProperties = next.getCustomProperties();
        for (int i=0; i<customProperties.size(); i++) {
          CustomProperty nextProperty = (CustomProperty) customProperties.get(i);
          imported.addCustomProperty(nextProperty.getDefinition(), nextProperty.getValueAsString());
        }
        original2imported.put(next, imported);
    }

  public CustomPropertyManager getCustomPropertyManager() {
    return this;
  }

  public List getDefinitions() {
    List result = new ArrayList(customFields.values());
    return result;
  }

  CustomPropertyDefinition getCustomPropertyDefinition(String nextName) {
    return (CustomPropertyDefinition) customFields.get(nextName);
  }

  static String getValueAsString(Object value) {
    final String result;
    if (value!=null) {
      if (value instanceof GanttCalendar) {
        result = ((GanttCalendar)value).toXMLString();
      }
      else {
        result = String.valueOf(value);
      }
    }
    else {
      result = null;
    }
    return result;
  }

  public CustomPropertyDefinition createDefinition(String id, String typeAsString, String name, String defaultValueAsString) {
    final CustomPropertyDefinition stubDefinition = CustomPropertyManager.PropertyTypeEncoder.decodeTypeAndDefaultValue(typeAsString, defaultValueAsString);
    CustomPropertyDefinition result = new CustomPropertyDefinitionImpl(name, id, stubDefinition);
    addCustomField(result);
    return result;
  }

  public void importData(CustomPropertyManager source) {
    // TODO Auto-generated method stub
   
  }
 
  static class CustomPropertyDefinitionImpl implements CustomPropertyDefinition {
    private final String myName;
    private final String myID;
    private final Object myDefaultValue;
    private final String myDefaultValueAsString;
    private final Class myType;
    private final String myTypeAsString;

    CustomPropertyDefinitionImpl(String name, String id, CustomPropertyDefinition stub) {
      myName = name;
      myID = id;
      myDefaultValue = stub.getDefaultValue();
      myDefaultValueAsString = stub.getDefaultValueAsString();
      myType = stub.getType();
      myTypeAsString = stub.getTypeAsString();
    }
    public Object getDefaultValue() {
      return myDefaultValue;
    }

    public String getDefaultValueAsString() {
      return myDefaultValueAsString;
    }

    public String getID() {
      return myID;
    }

    public String getName() {
      return myName;
    }

    public Class getType() {
      return myType;
    }

    public String getTypeAsString() {
      return myTypeAsString;
    }
   
  }
}
TOP

Related Classes of net.sourceforge.ganttproject.resource.HumanResourceManager$CustomPropertyDefinitionImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.