Package edu.mit.simile.backstage.model.ui.lens

Source Code of edu.mit.simile.backstage.model.ui.lens.DefaultLens

package edu.mit.simile.backstage.model.ui.lens;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import org.mozilla.javascript.Scriptable;
import org.openrdf.model.Resource;
import org.openrdf.model.Statement;
import org.openrdf.model.URI;
import org.openrdf.model.Value;
import org.openrdf.repository.RepositoryResult;
import org.openrdf.repository.sail.SailRepositoryConnection;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import edu.mit.simile.backstage.model.data.Database;
import edu.mit.simile.backstage.model.data.Database.PropertyRecord;
import edu.mit.simile.backstage.util.DefaultScriptableObject;
import edu.mit.simile.backstage.util.SailUtilities;
import edu.mit.simile.backstage.util.ScriptableArrayBuilder;
import edu.mit.simile.backstage.util.Utilities;

public class DefaultLens extends Lens {
    protected static Logger _logger = LoggerFactory.getLogger("backstage.lens.default-lens");

  @Override
  public void render(URI item, Scriptable result, Database database, SailRepositoryConnection connection) {
    result.put("label", result, database.getItemLabel(database.getItemId(item)));
   
    try {
      RepositoryResult<Statement> r = connection.getStatements(item, null, null, true, SailUtilities.noContext);
     
      Map<URI, Set<Value>> propertyToValues = new HashMap<URI, Set<Value>>();
      try {
        while (r.hasNext()) {
          Statement s = r.next();
         
          URI predicate = s.getPredicate();
          Set<Value> values = propertyToValues.get(predicate);
          if (values == null) {
            values = new HashSet<Value>();
           
            propertyToValues.put(predicate, values);
          }
          values.add(s.getObject());
        }
      } finally {
        r.close();
      }
     
          DefaultScriptableObject propertiesO = new DefaultScriptableObject();
         
      for (URI property : propertyToValues.keySet()) {
        String propertyID = database.getPropertyId(property);
        PropertyRecord propertyRecord = database.getPropertyRecord(propertyID);
       
            DefaultScriptableObject o = new DefaultScriptableObject();
        o.put("propertyLabel", o, propertyRecord.label);
        o.put("valueType", o, propertyRecord.valueType);
       
        ScriptableArrayBuilder valueArrayBuilder = new ScriptableArrayBuilder();
       
        Set<Value> values = propertyToValues.get(property);
        if ("item".equals(propertyRecord.valueType)) {
          for (Value value : values) {
            if (value instanceof URI) {
              URI itemURI = (URI) value;
              String itemID = database.getItemId(itemURI);
             
                  DefaultScriptableObject v = new DefaultScriptableObject();
                  v.put("id", v, itemID);
                  v.put("label", v, database.getItemLabel(itemID));
                 
                  valueArrayBuilder.add(v);
            } else {
              valueArrayBuilder.add(((Resource) value).stringValue());
            }
          }
        } else {
          for (Value value : values) {
            valueArrayBuilder.add(Utilities.valueToString(value));
          }
        }
        o.put("values", o, valueArrayBuilder.toArray());
       
        propertiesO.put(propertyID, propertiesO, o);
      }
     
      result.put("propertyValues", result, propertiesO);
    } catch (Exception e) {
      _logger.error("Failed to generate default lens for item " + item, e);
    }
  }
}
TOP

Related Classes of edu.mit.simile.backstage.model.ui.lens.DefaultLens

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.