Package org.cishell.reference.app.service.fileloader

Source Code of org.cishell.reference.app.service.fileloader.PrettyLabeler

package org.cishell.reference.app.service.fileloader;

import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Dictionary;
import java.util.Enumeration;
import java.util.Hashtable;

import org.cishell.framework.data.BasicData;
import org.cishell.framework.data.Data;
import org.cishell.framework.data.DataProperty;

public class PrettyLabeler {
  public static Data[] relabelWithFileName(Data[] data, File file) {
    File absoluteFile = file.getAbsoluteFile();
    File parent = absoluteFile.getParentFile();

    // TODO parent == null
   
    String prefix;
    String parentName = parent.getName();
    if (parentName.trim().length() == 0) {
      prefix = File.separator;
    } else {
      prefix = "..." + File.separator + parentName + File.separator;
    }

    Collection<Data> newData = new ArrayList<Data>(data.length);

    /* TODO: This isn't actually correct.
     * It will assign the same label to all of the data items if we ever do this.
     */
    for (Data datum : data) {
      Dictionary<String, Object> originalDatumMetadata = datum.getMetadata();
      Dictionary<String, Object> labeledDatumMetadata = new Hashtable<String, Object>();

      for (Enumeration<String> keys = originalDatumMetadata.keys();
          keys.hasMoreElements();) {
        String key = keys.nextElement();
        labeledDatumMetadata.put(key, originalDatumMetadata.get(key));
      }

      Data labeledDatum =
        new BasicData(labeledDatumMetadata, datum.getData(), datum.getFormat());
      labeledDatumMetadata.put(DataProperty.LABEL, prefix + absoluteFile.getName());
      newData.add(labeledDatum);
    }

    return newData.toArray(new Data[0]);
  }
 
  /**
   * Support Hierarchy structure labeling. The algorithm will avoid labeling
   * on children.
   * @param data - data that need to relabel
   * @param file - file that contains filename to be used for relabeling
   * @return the processed data with new labels
   */
  public static Data[] relabelWithFileNameHierarchy(Data[] data, File file) {
    File absoluteFile = file.getAbsoluteFile();
    File parent = absoluteFile.getParentFile();

    String prefix;
    String parentName = parent.getName();
    if (parentName.trim().length() == 0) {
      prefix = File.separator;
    } else {
      prefix = "..." + File.separator + parentName + File.separator;
    }

    Collection<Data> possibleParents = new ArrayList<Data>(data.length);

    for (Data datum : data) {
      Dictionary<String, Object> labeledDatumMetadata = datum.getMetadata();
      Object labelObject = labeledDatumMetadata.get(DataProperty.LABEL);

      if ((labelObject == null) || ("".equals(labelObject.toString()))) {
        Data dataParent = getParent(labeledDatumMetadata);

        if (!possibleParents.contains(dataParent)) {
          labeledDatumMetadata.put(DataProperty.LABEL, prefix + absoluteFile.getName());
        }

        possibleParents.add(datum);
      }
    }

    return data;
  }
 
  /*
   * Get the parent of the data
   */
  private static Data getParent(Dictionary<String, Object> labeledDatumMetadata) {
    return (Data) labeledDatumMetadata.get(DataProperty.PARENT);
  }
}
TOP

Related Classes of org.cishell.reference.app.service.fileloader.PrettyLabeler

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.