code: package org.rug.data.characteristics;
  
  import org.rug.data.project.IVersion;
  
  import java.util.List;
  
  /**
   * Represents a characteristic/attribute/property of a component.
   */
  public interface IComponentCharacteristic {
  
      /**
       * Returns the name of this characteristic.
       * @return the name.
      */
      String getName();
  
      /**
       * The version that contains the graph to calculate this characteristic and store it as a vertex, edge, or graph property.
       * @param version the version from which to retrieve the components
       */
      void calculate(IVersion version);
  
      /**
       * Returns the label used for the main operations on the given graph.
       * @return an array of labels.
       */
      List<String> getOperatingEdgeLabels();
  
      /**
       * Returns the label used for the main operations on the given graph.
       * @return an array of labels.
       */
      List<String> getOperatingVertexLabels();
  }
  