package org.gcube.portlets.admin.authportletmanager.client.pagelayout; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.SortedMap; import java.util.TreeMap; import org.gcube.portlets.admin.authportletmanager.client.Entities; import org.gcube.portlets.admin.authportletmanager.client.widget.WindowBox; import org.gcube.portlets.admin.authportletmanager.shared.Caller; import org.gcube.portlets.admin.authportletmanager.shared.Caller.TypeCaller; import org.gcube.portlets.admin.authportletmanager.shared.ConstantsSharing; import com.github.gwtbootstrap.client.ui.Button; import com.github.gwtbootstrap.client.ui.ListBox; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ChangeEvent; import com.google.gwt.event.dom.client.ChangeHandler; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; /** * Dialog Box for add multiple caller for one policy or quota * * @author "Alessandro Pieve " alessandro.pieve@isti.cnr.it * */ public class DialogAddMultipleCallerService extends WindowBox { private static final Binder binder = GWT.create(Binder.class); interface Binder extends UiBinder { } @UiField Button b_exit_dialog_caller; @UiField Button b_add_caller; @UiField ListBox l_service_class_policy; @UiField ListBox l_service_name_policy; @UiField ListBox l_service_id_policy; public ListBox rightList= new ListBox(true); @UiField VerticalPanel leftPanel; @UiField VerticalPanel rightPanel; @UiField VerticalPanel buttonPanel; @UiField Button toRightButton; @UiField Button allToLeftButton; @UiField Button toLeftButton; public PolicyAddDialog dialogPolicy; public QuoteAddDialog dialogQuota; public int typeMaster =0; public DialogAddMultipleCallerService(List callerSelected,PolicyAddDialog policyAddDialog) { this.setWidget(binder.createAndBindUi(this)); //this.setAutoHideEnabled(true); this.setGlassEnabled(true); this.setWidth("450px"); this.setText("Add/Remove Service"); this.setAnimationEnabled(isVisible()); this.center(); rightList.setVisibleItemCount(10); rightList.setSize(12); rightList.setStyleName("width_select"); rightPanel.add(rightList); //set padding between cells to make the component look better this.getElement().setAttribute("cellpadding", "1"); leftPanel.getElement().setAttribute("cellpadding", "1"); buttonPanel.getElement().setAttribute("cellpadding", "2"); rightPanel.getElement().setAttribute("cellpadding", "1"); l_service_class_policy.addChangeHandler(new ChangeHandler() { @SuppressWarnings("rawtypes") public void onChange(ChangeEvent event) { //String newValue = l_service_class_policy.getSelectedValue(); int index = l_service_class_policy.getSelectedIndex(); String newValue =l_service_class_policy.getValue(index); l_service_name_policy.clear(); if (newValue.equals(ConstantsSharing.Star)){ l_service_name_policy.setEnabled(false); l_service_name_policy.addItem(ConstantsSharing.Star); l_service_id_policy.setEnabled(false); } else{ l_service_name_policy.setEnabled(true); l_service_id_policy.setEnabled(true); //order by service name @SuppressWarnings("unchecked") List sortedServiceName=new ArrayList(Entities.getServicesMap().get(newValue)); Collections.sort(sortedServiceName); for (String serviceName :sortedServiceName ) { l_service_name_policy.addItem(serviceName); } } } }); initList(callerSelected,policyAddDialog); loadListService(); } /** * Click close dialog * @param e */ @UiHandler("b_exit_dialog_caller") void onClickDialogExitCaller(ClickEvent e) { this.hide(); this.clear(); } /** * Click for add a multiple caller service * @param e */ @UiHandler("b_add_caller") void onClickDialogAddCaller(ClickEvent e) { //resume list List selectedCallerService =new ArrayList(); for(int itemIndex=0; itemIndex= 1) { // !>= 1! is preferred instead of !== 1! to handle multiple selections toLeftButton.setEnabled(true); } SortedMap toTempList=new TreeMap(); for(int itemIndex=0; itemIndex mapFrom = sortByValues(toTempList); for (Entry entry : mapFrom.entrySet()) { //rightList.insertItem(item, index); rightList.addItem(entry.getKey(),entry.getValue()); GWT.log("Key"+entry.getKey()+"Value"+entry.getValue()); } } @UiHandler("allToLeftButton") public void allToLeftButtonClicked(ClickEvent event) { rightList.clear(); } @UiHandler("toRightButton") public void toRightButtonClicked(ClickEvent event) { //select the selected value and insert into list int indexC = l_service_class_policy.getSelectedIndex(); String serviceClass =l_service_class_policy.getValue(indexC); int indexN = l_service_name_policy.getSelectedIndex(); String serviceName =l_service_name_policy.getValue(indexN); int indexI = l_service_id_policy.getSelectedIndex(); String serviceId =l_service_id_policy.getValue(indexI); String serviceSelected=serviceClass+":"+serviceName+":"+serviceId; SortedMap toTempList=new TreeMap(); for(int itemIndex=0; itemIndex sortedServiceClass=new ArrayList(Entities.getServicesMap().keySet()); Collections.sort(sortedServiceClass); for (String serviceClass :sortedServiceClass ) { l_service_class_policy.addItem(serviceClass); } l_service_id_policy.addItem(ConstantsSharing.Star); } protected void initList(List callerSelected,PolicyAddDialog dialog) { //configure master for policy typeMaster=1; this.dialogPolicy=dialog; for (Caller caller :callerSelected){ if (caller.getTypecaller().equals(TypeCaller.service)) rightList.addItem(caller.getCallerName(), caller.getTypecaller().toString()); } } @SuppressWarnings({ "rawtypes", "unchecked" }) private static HashMap sortByValues(SortedMap tempList) { List list = new LinkedList(tempList.entrySet()); // Defined Custom Comparator here Collections.sort(list, new Comparator() { public int compare(Object o1, Object o2) { return ((Comparable) ((Map.Entry) (o1)).getValue()) .compareTo(((Map.Entry) (o2)).getValue()); } }); HashMap sortedHashMap = new LinkedHashMap(); for (Iterator it = list.iterator(); it.hasNext();) { Map.Entry entry = (Map.Entry) it.next(); sortedHashMap.put(entry.getKey(), entry.getValue()); } return sortedHashMap; } }