Package nsf.playground.beans

Source Code of nsf.playground.beans.DocBean$DocTreeModel

package nsf.playground.beans;

import java.io.StringReader;
import java.util.List;

import javax.faces.application.FacesMessage;

import lotus.domino.Database;
import lotus.domino.Document;
import lotus.domino.Item;
import lotus.domino.MIMEEntity;
import lotus.domino.NotesException;
import lotus.domino.View;
import lotus.domino.ViewEntry;
import lotus.domino.ViewNavigator;
import nsf.playground.extension.ImportOptions;
import nsf.playground.extension.PlaygroundExtensionFactory;
import nsf.playground.util.JsonTreeFromDominoView;

import com.ibm.commons.util.StringUtil;
import com.ibm.commons.util.TextUtil;
import com.ibm.commons.util.io.json.JsonGenerator;
import com.ibm.commons.util.io.json.JsonJavaFactory;
import com.ibm.commons.util.io.json.JsonParser;
import com.ibm.commons.xml.DOMUtil;
import com.ibm.xsp.component.UIInputEx;
import com.ibm.xsp.context.FacesContextEx;
import com.ibm.xsp.extlib.util.ExtLibUtil;
import com.ibm.xsp.model.domino.wrapped.DominoDocument;


/**
* Classes that encapsulates the business logic for the API documentation editor.
*
* @author priand
*/
public abstract class DocBean {
 
  public static class DocTreeModel implements nsf.playground.util.JsonTreeFromDominoView.TreeModel {
    public boolean isLeaf(ViewEntry ve) throws NotesException {
      String form = (String)ve.getColumnValues().get(1);
      return StringUtil.endsWithIgnoreCase(form, "API");
    }
  }
 
  public String getEntriesAsJson() throws Exception {
    JsonTreeFromDominoView tree = new JsonTreeFromDominoView();
    return tree.generateAsStringHier(new DocTreeModel(), "AllDocumentation", true);
  }

  public String getProducts() throws Exception {
    List<ImportOptions> opt = PlaygroundExtensionFactory.getExtensions(ImportOptions.class);
    StringBuilder b = new StringBuilder();
    for(int i=0; i<opt.size(); i++) {
      String[] prd = opt.get(i).getProducts();
      if(prd!=null) {
        for(int j=0; j<prd.length; j++) {
          if(b.length()>0) {
            b.append(',');
          }
          b.append(prd[j]);
        }
      }
    }
    return b.toString();
  }
 
  public void moveUp(String noteID) throws Exception {
    swap(noteID,true);
  }
  public void moveDown(String noteID) throws Exception {
    swap(noteID,false);
  }
  private boolean swap(String noteID, boolean previous) throws Exception {
    // Is there a faster way?
    View view = ExtLibUtil.getCurrentDatabase().getView("AllDocumentation");
    //view.setAutoUpdate(false);
    ViewNavigator vn = view.createViewNav();   
    try {
      for(ViewEntry ve=vn.getFirst(); ve!=null; ve=vn.getNext(ve)) {
        if(ve.getNoteID().equals(noteID)) {
          int docIndent = ve.getIndentLevel();
          Document doc = ve.getDocument();
          ve = previous ? vn.getPrev(ve) : vn.getNext(ve);
          if(ve!=null) {
            Document other = ve.getDocument();
            if(ve.getIndentLevel()==docIndent) {
              Object ts = other.getItemValue("OrderTS");
              other.replaceItemValue("OrderTS",doc.getItemValue("OrderTS"));
              doc.replaceItemValue("OrderTS",ts);
              doc.save();
              other.save();
              view.refresh();
              return true;
            }
          }
          return false;
        }
      }
    } finally {
      vn.recycle();
    }
    return false;
  }

  public String changeParent(String noteID, String newParentID) throws Exception {
    Database db = ExtLibUtil.getCurrentDatabase();
    Document doc = db.getDocumentByID(noteID);
    Document newParent = db.getDocumentByID(newParentID);
    doc.makeResponse(newParent);
    return null;
  }
 
  @SuppressWarnings("unchecked")
  public void remove(DominoDocument doc, String fieldName, int idx) throws Exception {
    String json = doc.getItemValueString(fieldName);
    if(!StringUtil.isSpace(json)) {
      List<Object> array = (List<Object>)JsonParser.fromJson(JsonJavaFactory.instance,json);
      if(idx<array.size()) {
        array.remove(idx);
        doc.replaceItemValue(fieldName, JsonGenerator.toJson(JsonJavaFactory.instance,array));
      }
    }
  }

  public boolean isEmpty(DominoDocument doc, String fieldName) throws Exception {
    if(doc!=null) {
      Item item = doc.getDocument().getFirstItem(fieldName);
      if(item!=null) {
        String content;
        MIMEEntity e = item.getMIMEEntity();
        if(e!=null) {
          content = e.getContentAsText();
        } else {
          content = item.getText();
        }
        if(!StringUtil.isSpace(content)) {
          // Should handle empty json objects/arrays as well
          content = content.trim();
          return content.equals("[]") || content.equals("{}");
        }
      }
    }
    return true;
  }
 
  public String generateValueList(String list) {
    if(StringUtil.isEmpty(list)) {
      return "";
    }
    StringBuilder b = new StringBuilder();
    b.append("<ul>");
    String[] values = StringUtil.splitString(list, '\n');
    for(int i=0; i<values.length; i++) {
      String s = values[i];
      if(StringUtil.isNotEmpty(s)) {
        String name = s;
        String desc = null;
        int pos = s.indexOf('|');
        if(pos>=0) {
          name = s.substring(0,pos);
          desc = s.substring(pos+1);
        }
        b.append("<li>");
        b.append("<b>");
        b.append(TextUtil.toXMLString(name));
        b.append("</b>");
        if(StringUtil.isNotEmpty(desc)) {
          b.append(": ");
          b.append(TextUtil.toXMLString(desc));
        }
        b.append("</li>");
      }
    }
    b.append("</ul>");
    return b.toString();
  }
 
  public void prettify(UIInputEx c) {
    String value = c.getValueAsString();
    value = prettify(value,false);
    if(value!=null) {
      c.setValue(value);
    } else {
      FacesContextEx ctx = FacesContextEx.getCurrentInstance();
      String msg = "Invalid file content";
      FacesMessage m = new FacesMessage(FacesMessage.SEVERITY_WARN, msg, msg);
      ctx.addMessage(c != null ? c.getClientId(ctx) : null, m);
    }
  }
  public void compact(UIInputEx c) {
    String value = c.getValueAsString();
    value = prettify(value,true);
    if(value!=null) {
      c.setValue(value);
    } else {
      FacesContextEx ctx = FacesContextEx.getCurrentInstance();
      String msg = "Invalid file content";
      FacesMessage m = new FacesMessage(FacesMessage.SEVERITY_WARN, msg, msg);
      ctx.addMessage(c != null ? c.getClientId(ctx) : null, m);
    }
  }
  public String prettify(String source,boolean compact) {
    try {
      source = source.trim();
      if(source.startsWith("[") || source.startsWith("{")) {
        return prettifyJSON(source,compact);
      } else if(source.startsWith("<")) {
        return prettifyXML(source,compact);
      }
      return source;
    } catch(Exception e) {
      return null;
    }
  }
  private String prettifyJSON(String source,boolean compact) throws Exception{
    Object o = JsonParser.fromJson(JsonJavaFactory.instance,new StringReader(source));
    return JsonGenerator.toJson(JsonJavaFactory.instance, o, compact);
  }
  private String prettifyXML(String source,boolean compact) throws Exception{
    org.w3c.dom.Document d = DOMUtil.createDocument(source);
    return DOMUtil.getXMLString(d,compact);
  }
}
TOP

Related Classes of nsf.playground.beans.DocBean$DocTreeModel

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.