Blame | Last modification | View Log | RSS feed
/** Copyright 2006 Google Inc.** Licensed under the Apache License, Version 2.0 (the "License"); you may not* use this file except in compliance with the License. You may obtain a copy of* the License at** http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the* License for the specific language governing permissions and limitations under* the License.*/package org.tela_botanica.client;import net.mygwt.ui.client.data.Model;import net.mygwt.ui.client.viewer.IAsyncContentCallback;import net.mygwt.ui.client.viewer.IAsyncTreeContentProvider;import net.mygwt.ui.client.viewer.IElementComparer;import net.mygwt.ui.client.viewer.ISelectionChangedListener;import net.mygwt.ui.client.viewer.ModelLabelProvider;import net.mygwt.ui.client.viewer.SelectionChangedEvent;import net.mygwt.ui.client.viewer.TreeViewer;import net.mygwt.ui.client.viewer.Viewer;import net.mygwt.ui.client.widget.ExpandBar;import net.mygwt.ui.client.widget.ExpandItem;import net.mygwt.ui.client.widget.tree.Tree;import com.google.gwt.json.client.JSONArray;import com.google.gwt.json.client.JSONParser;import com.google.gwt.json.client.JSONString;import com.google.gwt.json.client.JSONValue;import com.google.gwt.user.client.HTTPRequest;import com.google.gwt.user.client.ResponseTextHandler;import com.google.gwt.user.client.ui.Composite;public class DateFilterView extends Composite {private static final String VALUE_UNKNOWN = "Inconnus";private String user;private String serviceBaseUrl = null;private String year = "all";private String month = "all";private String day = "all";private Mediator mediator = null;private YEAR[] years=null;private MONTH[] months=null;private DAY[] days=null;private Model root = null;private MILLENIUM millenium = null;private Tree tree = null;private TreeViewer viewer=null;public DateFilterView(Mediator med, InventoryFilterView inventoryFilterView) {mediator=med;mediator.registerDateFilterView(this);user=mediator.getUser();serviceBaseUrl = mediator.getServiceBaseUrl();initTree();ExpandItem dateFilter = new ExpandItem();dateFilter.setText("Dates");ExpandBar expandBar=inventoryFilterView.getExpandBar();dateFilter.getContainer().add(tree);expandBar.add(dateFilter);}// Initialisation noeud de basevoid initTree() {// Enregistrement Mise à jour asynchroneIAsyncTreeContentProvider cp = new IAsyncTreeContentProvider() {public Object[] getElements(Object input) {Model m = (Model) input;return m.getChildren().toArray();}public Object getParent(Object element) {return ((Model) element).getParent();}public boolean hasChildren(Object parent) {if (parent instanceof DAY) { // Jourreturn false;}else {if (parent instanceof YEAR) { // Anneeif (((YEAR)parent).toString().compareTo(VALUE_UNKNOWN)==0)return false;elsereturn true;}else {return true;}}}public void getChildren(final Object parent, final IAsyncContentCallback callback) {if (parent instanceof YEAR) {// Annee + moisHTTPRequest.asyncGet(serviceBaseUrl + "/InventoryDateList/" + user + "/"+ ((YEAR) parent).getAsString("path"),new ResponseTextHandler() {public void onCompletion(String str) {JSONValue jsonValue = JSONParser.parse(str);JSONArray jsonArray;JSONArray jsonArrayNested;int i=0;if ((jsonArray = jsonValue.isArray()) != null) {int arraySize = jsonArray.size();months=new MONTH[arraySize];for (i = 0; i < arraySize; ++i) {if ((jsonArrayNested = jsonArray.get(i).isArray()) != null) {String month=Util.toCelString(((JSONString)jsonArrayNested.get(0)).toString());if (month.compareTo("0")==0) month=VALUE_UNKNOWN;months[i]=new MONTH((YEAR) parent,month);}}callback.setElements(months);}}});}else if (parent instanceof MONTH) {// Mois + joursHTTPRequest.asyncGet(serviceBaseUrl + "/InventoryDateList/" + user + "/"+ ((MONTH) parent).getAsString("path") ,new ResponseTextHandler() {public void onCompletion(String str) {JSONValue jsonValue = JSONParser.parse(str);JSONArray jsonArray;JSONArray jsonArrayNested;int i=0;if ((jsonArray = jsonValue.isArray()) != null) {int arraySize = jsonArray.size();days=new DAY[arraySize];for (i = 0; i < arraySize; ++i) {if ((jsonArrayNested = jsonArray.get(i).isArray()) != null) {String day=Util.toCelString(((JSONString)jsonArrayNested.get(0)).toString());if (day.compareTo("0")==0) day=VALUE_UNKNOWN;days[i]=new DAY((MONTH) parent, day);}}callback.setElements(days);}}});}else if (parent instanceof MILLENIUM) {// Rafraichissement RacineHTTPRequest.asyncGet(serviceBaseUrl + "/InventoryDateList/" + user ,new ResponseTextHandler() {public void onCompletion(String str) {JSONValue jsonValue = JSONParser.parse(str);JSONArray jsonArray;JSONArray jsonArrayNested;int i=0;if ((jsonArray = jsonValue.isArray()) != null) {int arraySize = jsonArray.size();years=new YEAR[arraySize];for (i = 0; i < arraySize; ++i) {if ((jsonArrayNested = jsonArray.get(i).isArray()) != null) {String all=Util.toCelString(((JSONString)jsonArrayNested.get(0)).toString());if (all.compareTo("0")==0) all=VALUE_UNKNOWN;years[i]=new YEAR(all);}}callback.setElements(years);}}});}}public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}};tree = new Tree();viewer = new TreeViewer(tree);viewer.setContentProvider(cp);viewer.setLabelProvider(new ModelLabelProvider());viewer.setComparer(new IElementComparer() {public boolean equals(Object a, Object b) {if ((a==null) || b==null)return false;if (((Model) a).getAsString("name").compareTo(((Model) b).getAsString("name"))==0) {return true;}else return false;}});viewer.addSelectionListener(new ISelectionChangedListener() {public void selectionChanged(SelectionChangedEvent se) {Model m = (Model) se.getSelection().getFirstElement();// Info.show("Selection Changed", "{0} was selected", m.getAsString("path"));if (m instanceof MONTH) { // Moismonth=m.getAsString("name");if (month.compareTo(VALUE_UNKNOWN)==0) month="0";year=m.getAsString("year");if (year.compareTo(VALUE_UNKNOWN)==0) year="0";day="all";mediator.onDateSelected(year,month,day);}elseif (m instanceof DAY) { // Jourmonth=m.getAsString("month");if (month.compareTo(VALUE_UNKNOWN)==0) month="0";year=m.getAsString("year");if (year.compareTo(VALUE_UNKNOWN)==0) year="0";day=m.getAsString("name");if (day.compareTo(VALUE_UNKNOWN)==0) day="0";mediator.onDateSelected(year,month,day);}elseif (m instanceof YEAR) { // Anneemonth="all";year=m.getAsString("name");if (year.compareTo(VALUE_UNKNOWN)==0) year="0";day="all";mediator.onDateSelected(year,month,day);}if (m instanceof MILLENIUM) { // Tousmonth="all";year="all";day="all";mediator.onDateSelected(year,month,day);}}});// Initialisation premier niveau (doublon obligatoire avec rafraichissement asynchrone)root = new Model();HTTPRequest.asyncGet(serviceBaseUrl + "/InventoryDateList/" + user,new ResponseTextHandler() {public void onCompletion(String str) {JSONValue jsonValue = JSONParser.parse(str);JSONArray jsonArray;JSONArray jsonArrayNested;int i=0;if ((jsonArray = jsonValue.isArray()) != null) {int arraySize = jsonArray.size();years=new YEAR[arraySize];millenium = new MILLENIUM("Toutes");for (i = 0; i < arraySize; ++i) {if ((jsonArrayNested = jsonArray.get(i).isArray()) != null) {String all=Util.toCelString(((JSONString)jsonArrayNested.get(0)).toString());if (all.compareTo("0")==0) all=VALUE_UNKNOWN;years[i]=new YEAR(all);millenium.add(years[i]);}}root.add(millenium);viewer.setInput(root);}}});}private class MILLENIUM extends Model { // Rootpublic MILLENIUM(String name) {set("name", name);set("path", name);}public String toString() {return getAsString("name");}}private class YEAR extends Model { // Anneepublic YEAR(String name) {set("name", name);set("path", name);}public String toString() {return getAsString("name");}}private class MONTH extends Model { // Moispublic MONTH(YEAR parent, String name) {set("name", name);set("year", parent.get("name"));set("path", parent.get("path")+"/"+name);}public String toString() {return getAsString("name");}}private class DAY extends Model { // Jourpublic DAY(MONTH parent,String name) {set("name", name);set("year", parent.get("year"));set("month", parent.get("name"));set("path", parent.get("path")+"/"+name);}public String toString() {return getAsString("name");}}public void setUser(String user) {this.user = user;}public void setYear(String year) {this.year = year;}public void setMonth(String month) {this.month = month;}public void setDay(String day) {this.day = day;}public void update() {Model r=new Model();r.set("name","Toutes");viewer.refresh(r);}}