Package er.bugtracker

Source Code of er.bugtracker.Component

/*
* Copyright (C) NetStruxr, Inc. All rights reserved.
*
* This software is published under the terms of the NetStruxr
* Public Software License version 0.5, a copy of which has been
* included with this distribution in the LICENSE.NPL file.  */
package er.bugtracker;

import java.util.Enumeration;

import com.webobjects.eoaccess.EOUtilities;
import com.webobjects.eocontrol.EOEditingContext;
import com.webobjects.eocontrol.EOGlobalID;
import com.webobjects.eocontrol.EOQualifierEvaluation;
import com.webobjects.eocontrol.EOSortOrdering;
import com.webobjects.foundation.NSArray;
import com.webobjects.foundation.NSKeyValueCoding;
import com.webobjects.foundation.NSMutableArray;
import com.webobjects.foundation.NSMutableDictionary;
import com.webobjects.foundation.NSValidation;

import er.extensions.foundation.ERXArrayUtilities;

public class Component extends _Component {

  public String sortOrder() {
        NSMutableArray array = new NSMutableArray();
        Component p = this;
        while(p != null) {
            array.addObject(p.textDescription());
            p = p.parent();
        }
        return array.valueForKeyPath("@reverse.toString").toString();
  }

    public int level() {
    return level(0);
  }

  public int level(int safe) {
    if (safe > 10)
      return -1;
    Component parent = parent();
    return parent == null ? 0 : 1 + parent.level(safe + 1);
  }

  public String indentedDescription() {
    int level = level();
    StringBuilder sb = new StringBuilder();
    if (level == -1)
      sb.append("***");
    else
      for (int i = 0; i < level(); i++)
        sb.append('-');
    sb.append(valueForKey("textDescription"));
    return sb.toString();
  }

  public Object validateParent(Component newParent) {
    if (!okToSetParent(this, newParent))
      throw new NSValidation.ValidationException("Sorry: the parent-child relationship you are setting would create a cycle");
    return null;
  }

  public boolean okToSetParent(Component child, Component parent) {
    return parent == null ? true : okToSetParent(child, (Component) parent.valueForKey("parent"));
  }

  public static class ComponentClazz extends _ComponentClazz {

    private NSMutableDictionary _cachedComponentsByGlobalID;
    private NSMutableArray _cachedComponents;

    public synchronized NSArray orderedComponents(EOEditingContext ec) {
      NSMutableArray result = new NSMutableArray();
      if (_cachedComponentsByGlobalID == null) {
                _cachedComponents = new NSMutableArray();
                _cachedComponentsByGlobalID = new NSMutableDictionary();
        addChildrenOfComponentToArray(null, result, ec);
        int level = 0;
        for (Enumeration e = result.objectEnumerator(); e.hasMoreElements();) {
          Component component = (Component) e.nextElement();
          String sortOrder = (level < 10 ? "0" : "") + (level);
          _cachedComponentsByGlobalID.setObjectForKey(sortOrder, component.permanentGlobalID());
          _cachedComponents.addObject(component.permanentGlobalID());
          level++;
        }
      }
      result.removeAllObjects();
      for (Enumeration e = _cachedComponents.objectEnumerator(); e.hasMoreElements();) {
        EOGlobalID gid = (EOGlobalID) e.nextElement();
        Component component = (Component) ec.faultForGlobalID(gid, ec);
        if(component != null) {
          result.addObject(component);
        } else {
          log.error("No object: " + gid);
        }
      }
      return result;
    }

    private static NSArray DESCRIPTION_SORT = new NSArray(EOSortOrdering.sortOrderingWithKey("textDescription", EOSortOrdering.CompareAscending));

    public void addChildrenOfComponentToArray(Component c, NSMutableArray a, EOEditingContext ec) {
      NSArray children = c != null ? (NSArray) c.valueForKey("children") : EOUtilities.objectsMatchingKeyAndValue(ec, "Component", "parent", NSKeyValueCoding.NullValue);
      children = EOSortOrdering.sortedArrayUsingKeyOrderArray(children, DESCRIPTION_SORT);
      for (Enumeration e = children.objectEnumerator(); e.hasMoreElements();) {
        Component child = (Component) e.nextElement();
        a.addObject(child);
        addChildrenOfComponentToArray(child, a, ec);
      }
    }
  }

  public static ComponentClazz clazz = new ComponentClazz();

    public NSArray openBugs() {
        return ERXArrayUtilities.filteredArrayWithQualifierEvaluation(bugs(), new EOQualifierEvaluation() {
            public boolean evaluateWithObject(Object object) {
                State state = ((Bug)object).state();
                return !(state.equals(State.CLOSED) || state.equals(State.DOCUMENT));
            }
           
        });
    }

    public NSArray openRequirements() {
        return ERXArrayUtilities.filteredArrayWithQualifierEvaluation(requirements(), new EOQualifierEvaluation() {
            public boolean evaluateWithObject(Object object) {
                State state = ((Bug)object).state();
                return !(state.equals(State.CLOSED) || state.equals(State.DOCUMENT));
            }
           
        });
    }
}
TOP

Related Classes of er.bugtracker.Component

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.