Package demo.selector

Source Code of demo.selector.SelectorDemoController

/**
*
*/
package demo.selector;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileFilter;
import java.io.FileReader;
import java.util.Arrays;
import java.util.Date;

import javax.servlet.ServletContext;

import org.zkoss.selector.ComponentIterator;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Components;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.api.HtmlBasedComponent;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.Label;
import org.zkoss.zul.ListModelList;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.ListitemRenderer;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Window;

/**
*
* @author simonpai
*/
public class SelectorDemoController extends GenericForwardComposer {
 
  private static final long serialVersionUID = 6738045491398493198L;
 
  private static final String CLEAR = "clear.zul";
 
  private Window componentsWindow;
  private Textbox zulSrcBox;
  private Textbox selectorBox;
  private Listbox zulListbox;
  private Label indexLb;
  private Label compLb;
  private Label parseLb;
  private Label timeLb;
  private Label iterLb;
 
  private String _currSelector;
  private ComponentIterator _iterator;
  private Component _selected;
 
  @Override
  public void doAfterCompose(Component comp) throws Exception {
    super.doAfterCompose(comp);
   
    final String curPath =
      ((ServletContext) desktop.getWebApp().getNativeContext())
        .getRealPath("selector/case");
    File root = new File(curPath);
    File[] zuls = root.listFiles(new FileFilter(){
      public boolean accept(File f) {
        return f.isFile() && f.getName().endsWith(".zul");
      }
    });
    Arrays.sort(zuls, new java.util.Comparator<File>() {
      public int compare(File a, File b) {
        String aname = a.getName();
        String bname = b.getName();
        if(CLEAR.equals(aname)) return -1;
        if(CLEAR.equals(bname)) return 1;
        return aname.compareTo(bname);
      }
    });
    zulListbox.setItemRenderer(new ListitemRenderer(){
      public void render(Listitem listitem, Object data) {
        final File f = (File) data;
        final String fname = f.getName();
        listitem.setLabel(fname.substring(0, fname.length()-4));
        listitem.addEventListener("onClick", new EventListener(){
          public void onEvent(Event event) throws Exception {
            if(CLEAR.equals(fname)) {
              zulSrcBox.setValue("");
              Components.removeAllChildren(componentsWindow);
            } else {
              zulSrcBox.setValue(readFile(f));
              loadZul();
            }
          }
        });
      }
    });
    zulListbox.setModel(new ListModelList(zuls));
  }
 
  public void onClick$stepBtn(Event event) {
    step();
  }
 
  public void onOK$selectorBox(Event event) {
    step();
  }
 
  public void onClick$resetBtn(Event event) {
    _iterator = getComponentIterator(selectorBox.getValue());
    removeMark(_selected);
    _selected = null;
    indexLb.setValue("-");
    compLb.setValue("-");
    timeLb.setValue("-");
    iterLb.setValue("");
  }
 
  public void onChange$zulSrcBox(Event event) {
    loadZul();
  }
 
  public void onClick$clearBtn(Event event) {
    zulSrcBox.setValue("");
    Components.removeAllChildren(componentsWindow);
  }
 
 
 
  // helper //
  private ComponentIterator getComponentIterator(String selector){
    long pst = new Date().getTime();
    ComponentIterator result = new ComponentIterator(componentsWindow, selector);
    long ptime = new Date().getTime() - pst;
    parseLb.setValue("" + ptime + "ms");
    return result;
  }
 
  private void step(){
    String selector = selectorBox.getValue();
    if(!selector.equals(_currSelector)) {
      _currSelector = selector;
      _iterator = getComponentIterator(selector);
    }
   
    removeMark(_selected);
    long start = new Date().getTime();
    boolean hasNext = _iterator.hasNext();
    long timeCost = new Date().getTime() - start;
    addMark(_selected = hasNext? _iterator.next() : null);
    indexLb.setValue("" + (_iterator.getIndex() - 1));
    compLb.setValue(_selected == null? "null" : _selected.toString());
    iterLb.setValue(_iterator.toString());
    timeLb.setValue("" + timeCost + "ms");
  }
 
  private void loadZul(){
    Components.removeAllChildren(componentsWindow);
    try {
      Executions.createComponentsDirectly(zulSrcBox.getValue(), "zul",
          componentsWindow, null);
    } catch (RuntimeException e) {
      Executions.createComponentsDirectly("Error loading ZUL", "zul",
          componentsWindow, null);
    }
  }
 
  private void removeMark(Component selected){
    if(selected == null || !(selected instanceof HtmlBasedComponent)) return;
    HtmlBasedComponent comp = (HtmlBasedComponent) selected;
    String sc = comp.getSclass();
    comp.setSclass(sc.substring(0, sc.lastIndexOf(" __selected__")));
  }
 
  private void addMark(Component selected){
    if(selected == null || !(selected instanceof HtmlBasedComponent)) return;
    HtmlBasedComponent comp = (HtmlBasedComponent) selected;
    comp.setSclass(comp.getSclass() + " __selected__");
  }
 
  private String readFile(File file) throws Exception {
    String newLine = System.getProperty("line.separator");
    BufferedReader br = new BufferedReader(new FileReader(file));
    String next = "";
    StringBuffer sb = new StringBuffer();
    while((next = br.readLine()) != null)
      sb.append(next).append(newLine);
    return sb.toString();
  }
}

TOP

Related Classes of demo.selector.SelectorDemoController

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.