package org.unc.hive.client; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Set; import org.gwtmultipage.client.UrlPatternEntryPoint; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.BlurEvent; import com.google.gwt.event.dom.client.BlurHandler; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.FocusEvent; import com.google.gwt.event.dom.client.FocusHandler; import com.google.gwt.event.dom.client.KeyCodes; import com.google.gwt.event.dom.client.KeyPressEvent; import com.google.gwt.event.dom.client.KeyPressHandler; import com.google.gwt.event.logical.shared.OpenEvent; import com.google.gwt.event.logical.shared.OpenHandler; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.user.client.ui.FlexTable; import com.google.gwt.user.client.Event; import com.google.gwt.user.client.History; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.CaptionPanel; import com.google.gwt.user.client.ui.CheckBox; import com.google.gwt.user.client.ui.DecoratedPopupPanel; import com.google.gwt.user.client.ui.DockPanel; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Grid; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.HasVerticalAlignment; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Hyperlink; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.PopupPanel; import com.google.gwt.user.client.ui.PushButton; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.ScrollPanel; import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.TabBar; import com.google.gwt.user.client.ui.TextArea; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.ToggleButton; import com.google.gwt.user.client.ui.Tree; import com.google.gwt.user.client.ui.TreeItem; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; //@UrlPatternEntryPoint(value = "ConceptBrowser.html(\\\\#.*)?" ) @UrlPatternEntryPoint(value = "ConceptBrowser([^.]*).html(\\\\?.*)?(\\\\#.*)?" ) /* * Entry point classes define <code>onModuleLoad()</code>. */ public class ConceptBrowser implements EntryPoint, ValueChangeHandler<String> { private final ConceptBrowserServiceAsync conceptBrowserService = GWT .create(ConceptBrowserService.class); private HorizontalPanel configure; private Grid alphabetGrid; private HorizontalPanel search; private TextBox queryBox; private PushButton openNewVocabulary; private TabBar browsingTab; private ScrollPanel conceptList; private ClosablePanel searchResult; private ScrollPanel resultList; private VerticalPanel conceptDetail; private SimplePanel conceptInfo; private FlowPanel addVocabularyPanel; private VerticalPanel filteringPanel; private CaptionPanel captionForFiltering; private Image loadingBar; private Image loadingBar2; // Below is the data received from server private String subAlpha; private List<String> openedVocabularies; // store the name of current loaded // vocabularies in client side private List<String> allVocabulary; // store the name of all vocabularies // that hive have private List<ConceptProxy> resultStorage; private List<String> filteringVocabularies; private String queryfromhome = ""; private String currentViewing; // store the name of the vocabulary the user currently is browsing private HIVEMessages messages = (HIVEMessages)GWT.create(HIVEMessages.class); // private ConceptProxy randomConcept; public ConceptBrowser() { // Could be changed through user selection this.subAlpha = "A"; History.addValueChangeHandler(this); this.queryfromhome = History.getToken(); } public void onModuleLoad() { final PopupPanel loadingPopup = new PopupPanel(); loadingPopup.add(new Label(messages.conceptbrowser_loading())); loadingPopup.addStyleName("z-index"); loadingPopup.setGlassEnabled(true); loadingPopup.show(); loadingPopup.center(); setup(); conceptBrowserService.getAllVocabulariesName(new AsyncCallback<List<String>>() { @Override public void onFailure(Throwable caught) { Window.alert(messages.conceptbrowser_getVocabulariesError()); } @Override public void onSuccess(List<String> result) { loadingPopup.hide(); allVocabulary = result; /*Different path of initialization*/ if (queryfromhome.startsWith("query=")) { /*Return search result and view default vocabulary*/ String query = queryfromhome.substring(queryfromhome.indexOf("=", 0) + 1); queryBox.setText(query); searchResult.setHeaderText(query); searchResult.setContent(resultList); searchResult.setFiltering(captionForFiltering); resultList.clear(); resultList.add(loadingBar2); if (searchResult.getIsOpened() == false) { conceptDetail.insert(searchResult, 0); searchResult.setIsOpened(true); } conceptBrowserService.searchForConcept(query, allVocabulary, new AsyncCallback<List<ConceptProxy>>() { @Override public void onFailure(Throwable caught) { // TODO Auto-generated method stub HTML reminder = new HTML( "<span style = 'color:red'>" + messages.conceptbrowser_serverError() + "</span>"); resultList.clear(); filteringPanel.clear(); resultList.add(reminder); } @Override public void onSuccess(List<ConceptProxy> result) { if (result.size() == 0) { HTML reminder = new HTML( "<span style = 'color:red'>" + messages.conceptbrowser_noresults() + "</span>"); resultList.clear(); filteringPanel.clear(); resultList.add(reminder); } else { resultStorage = result; resultList.clear(); if (filteringVocabularies == null) filteringVocabularies = new ArrayList<String>(); else filteringVocabularies.clear(); FlexTable resulttable = new FlexTable(); resultList.add(resulttable); int i = 0; for (ConceptProxy cp : result) { String origin = cp.getOrigin(); if (filteringVocabularies.contains(origin) == false) { filteringVocabularies.add(origin); } String preLabel = cp.getPreLabel(); String uri = cp.getURI(); String[] tokens = uri.split(" "); String namespaceURI = tokens[0]; String lp = tokens[1]; ConceptLink cpl = new ConceptLink(origin, namespaceURI, lp, preLabel, origin + ":" + lp); cpl.setWidth("300px"); cpl.addClickHandler(new ConceptHandler(namespaceURI, lp)); cpl.setTitle(preLabel); Label originlb = new Label(origin); resulttable.setWidget(i, 0, originlb); resulttable.setWidget(i, 1, cpl); i++; } openedVocabularies = filteringVocabularies; currentViewing = filteringVocabularies.get(0).toUpperCase(); for (int j = 0; j < resulttable.getRowCount(); j++) { resulttable.getCellFormatter().addStyleName(j, 0, "origin-style"); resulttable.getCellFormatter().addStyleName(j, 1, "concept-style"); } filteringPanel.clear(); for (String ori : filteringVocabularies) { final CheckBox check = new CheckBox(ori); check.setValue(true); check.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { // TODO Auto-generated method stub Boolean isChecked = check.getValue(); String voc = check.getText(); resultList.clear(); FlexTable flex = new FlexTable(); if (!isChecked) { filteringVocabularies.remove(voc); } else { filteringVocabularies.add(voc); } int i = 0; for (ConceptProxy c : resultStorage) { String origin = c.getOrigin(); if (filteringVocabularies.contains(origin)) { flex.setText(i, 0, c .getOrigin()); String preLabel = c .getPreLabel(); String uri = c.getURI(); String[] tokens = uri .split(" "); String namespaceURI = tokens[0]; String lp = tokens[1]; ConceptLink cpl = new ConceptLink( origin, namespaceURI, lp, preLabel, origin + ":" + lp); cpl.addClickHandler(new ConceptHandler( namespaceURI, lp)); flex.setWidget(i, 1, cpl); i++; } } for (int j = 0; j < flex.getRowCount(); j++) { flex.getCellFormatter() .addStyleName(j, 0, "origin-style"); flex.getCellFormatter() .addStyleName(j, 1, "concept-style"); } resultList.add(flex); } }); filteringPanel.add(check); } } displayOpenedVocabularies(); initVocabulariesMenu(); initBrowsingTab(); } }); } else if(queryfromhome.startsWith("voc=")) { currentViewing = queryfromhome.substring(queryfromhome.indexOf("=", 0) + 1); openedVocabularies = new ArrayList<String>(); openedVocabularies.add(currentViewing.toLowerCase()); conceptBrowserService.getFirstConcept(currentViewing, new AsyncCallback<ConceptProxy>() { @Override public void onFailure(Throwable caught) { // TODO Auto-generated method stub } @Override public void onSuccess(ConceptProxy result) { // TODO Auto-generated method stub displayConceptInfo(result); } }); displayOpenedVocabularies(); initVocabulariesMenu(); initBrowsingTab(); } else { openedVocabularies = new ArrayList<String>(); final PopupPanel choosePanel = new PopupPanel(); choosePanel.setGlassEnabled(true); choosePanel.addStyleName("choose-panel"); DockPanel dock = new DockPanel(); Label lb = new Label(messages.conceptbrowser_chooseVocabulary()); lb.addStyleName("heading"); dock.add(lb, DockPanel.NORTH); CaptionPanel caption = new CaptionPanel(messages.conceptbrowser_vocabularyList()); FlowPanel flow = new FlowPanel(); for(String c : allVocabulary) { final CheckBox check = new CheckBox(c); flow.add(check); check.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { // TODO Auto-generated method stub Boolean isChecked = check.getValue(); if(isChecked) { openedVocabularies.add(check.getText().toLowerCase()); } else { openedVocabularies.remove(check.getText().toLowerCase()); } } }); } caption.add(flow); caption.setWidth("380px"); caption.setHeight("200px"); dock.add(caption, DockPanel.CENTER); HorizontalPanel hp = new HorizontalPanel(); Button okButton = new Button(messages.conceptbrowser_ok()); okButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { // TODO Auto-generated method stub choosePanel.removeFromParent(); if(openedVocabularies.isEmpty()) { openedVocabularies.add(allVocabulary.get(0).toLowerCase()); } currentViewing = openedVocabularies.get(0).toUpperCase(); conceptBrowserService.getFirstConcept(currentViewing, new AsyncCallback<ConceptProxy>() { @Override public void onFailure(Throwable caught) { // TODO Auto-generated method stub } @Override public void onSuccess(ConceptProxy result) { // TODO Auto-generated method stub displayConceptInfo(result); } }); displayOpenedVocabularies(); initVocabulariesMenu(); initBrowsingTab(); } }); Button cancelButton = new Button(messages.conceptbrowser_cancel()); cancelButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { // TODO Auto-generated method stub choosePanel.removeFromParent(); openedVocabularies.clear(); openedVocabularies.add(allVocabulary.get(0).toLowerCase()); currentViewing = openedVocabularies.get(0).toUpperCase(); conceptBrowserService.getFirstConcept(currentViewing, new AsyncCallback<ConceptProxy>() { @Override public void onFailure(Throwable caught) { // TODO Auto-generated method stub } @Override public void onSuccess(ConceptProxy result) { // TODO Auto-generated method stub displayConceptInfo(result); } }); displayOpenedVocabularies(); initVocabulariesMenu(); initBrowsingTab(); } }); Label tip = new Label(messages.conceptbrowser_cancelDefault() ); tip.setWidth("250px"); tip.addStyleName("tip"); hp.add(okButton); hp.add(cancelButton); hp.add(tip); hp.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER); hp.setSpacing(5); dock.add(hp, DockPanel.SOUTH); choosePanel.add(dock); choosePanel.center(); choosePanel.show(); } } }); } private void setup() { loadingBar = new Image("./img/loadingbar.gif"); loadingBar.addStyleName("loading-image"); loadingBar2 = new Image("./img/loadingbar.gif"); loadingBar2.addStyleName("loading-image"); configure = new HorizontalPanel(); configure.setVerticalAlignment(HasVerticalAlignment.ALIGN_TOP); // configure.setStyleName("configure"); configure.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT); SimplePanel configureWrapper = new SimplePanel(); configureWrapper.add(configure); configureWrapper.setStyleName("configure"); final Label lb1 = new Label(messages.conceptbrowser_openedVocabularies()); lb1.setWidth("150px"); lb1.addStyleName("label"); configure.add(lb1); addVocabularyPanel = new FlowPanel(); addVocabularyPanel.setSize("200px", "150px"); queryBox = new TextBox(); queryBox.setWidth("250px"); initializeSearchbox(); final VerticalPanel verticalPanel = new VerticalPanel(); verticalPanel.setWidth("320px"); verticalPanel.addStyleName("browsingLeft"); verticalPanel.add(search); this.initAlphabeticalGrid(); final VerticalPanel vpBrowser = new VerticalPanel(); vpBrowser.add(alphabetGrid); vpBrowser.addStyleName("tabpanel"); conceptList = new ScrollPanel(); conceptList.setWidth("330px"); conceptList.setHeight("600px"); vpBrowser.add(conceptList); browsingTab = new TabBar(); verticalPanel.add(browsingTab); verticalPanel.add(vpBrowser); resultList = new ScrollPanel(); searchResult = new ClosablePanel(); searchResult.setHeaderStyle("resultlist-header-style"); resultList.setWidth("420px"); resultList.setHeight("300px"); resultList.addStyleName("background-white"); resultList.addStyleName("border-default"); resultList.addStyleName("add-margin"); resultList.addStyleName("add-padding"); searchResult.addStyleName("border-default"); searchResult.addStyleName("background-default"); filteringPanel = new VerticalPanel(); captionForFiltering = new CaptionPanel(messages.conceptbrowser_filter()); captionForFiltering.add(filteringPanel); captionForFiltering.addStyleName("add-margin"); captionForFiltering.setWidth("120px"); conceptInfo = new SimplePanel(); conceptDetail = new VerticalPanel(); conceptInfo.setWidth("625px"); conceptDetail.add(conceptInfo); conceptDetail.setWidth("625px"); final HorizontalPanel hsp = new HorizontalPanel(); hsp.add(verticalPanel); hsp.add(conceptDetail); hsp.addStyleName("border-top"); hsp.setWidth("980px"); RootPanel.get("content").add(configureWrapper); RootPanel.get("content").add(hsp); } private void initializeSearchbox() { queryBox.addFocusHandler(new FocusHandler() { @Override public void onFocus(FocusEvent event) { // TODO Auto-generated method stub queryBox.addStyleName("focus"); if (queryBox.getValue() != "") { queryBox.setValue(""); } } }); queryBox.addBlurHandler(new BlurHandler() { @Override public void onBlur(BlurEvent event) { // TODO Auto-generated method stub queryBox.removeStyleName("focus"); } }); queryBox.addKeyPressHandler(new KeyPressHandler() { @Override public void onKeyPress(KeyPressEvent event) { // TODO Auto-generated method stub if (event.getCharCode() == KeyCodes.KEY_ENTER) { String query = queryBox.getValue(); if (query.equals("")) { Window.alert(messages.conceptbrowser_enterQueryMessage()); } else { loadingResultList(query); } } } }); final Button searchButton = new Button(messages.conceptbrowser_searchButton()); searchButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent e) { final String query = queryBox.getValue(); if (query.equals("")) { Window.alert(messages.conceptbrowser_enterQueryMessage()); } else { loadingResultList(query); } } }); this.search = new HorizontalPanel(); search.setWidth("100%"); search.addStyleName("searchConcept"); search.setSpacing(0); search.add(queryBox); search.add(searchButton); } private void displayOpenedVocabularies() { for (final String c : openedVocabularies) { final ToggleButton closeVocabulary = new ToggleButton(new Image("./img/close.jpg"), new Image("./img/disabled.jpg")); Label vname = new Label(c.toUpperCase()); vname.addStyleName("vname"); final HorizontalPanel hp = new HorizontalPanel(); hp.setVerticalAlignment(HasVerticalAlignment.ALIGN_TOP); hp.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT); hp.addStyleName("vocabularyMenu"); hp.add(closeVocabulary); hp.add(vname); configure.add(hp); configure.setCellHorizontalAlignment(hp, HasHorizontalAlignment.ALIGN_LEFT); closeVocabulary.addClickHandler(new ClickHandler() { public void onClick(ClickEvent e) { if (closeVocabulary.isDown()) { closeVocabulary.setDown(false); ConfirmDialog dlg = new ConfirmDialog(hp,closeVocabulary, c.toUpperCase(), false, true); dlg.show(); dlg.center(); } else { /* Bring back the deleted vocabulary */ openedVocabularies.add(c.toLowerCase()); final Hyperlink hp = new Hyperlink(c.toUpperCase(), c.toUpperCase()); browsingTab.addTab(hp); } } }); } } private void initVocabulariesMenu() { this.openNewVocabulary = new PushButton(new Image("./img/add.jpg")); openNewVocabulary.setSize("12px", "11px"); openNewVocabulary.addClickHandler(new OpenNewVocabularyHandler()); configure.add(openNewVocabulary); configure.setCellHorizontalAlignment(openNewVocabulary, HasHorizontalAlignment.ALIGN_LEFT); Label lb = new Label(messages.conceptbrowser_addButton()); lb.addClickHandler(new OpenNewVocabularyHandler()); lb.addStyleName("addlabel"); configure.add(lb); } private void initAlphabeticalGrid() { this.alphabetGrid = new Grid(3, 13); alphabetGrid.setCellSpacing(0); alphabetGrid.addStyleName("alphabetGrid"); int i = 0; int j = 0; String alphaList = messages.conceptbrowser_alphaList(); String[] alphabetical = alphaList.split(","); for (final String c : alphabetical) { final Hyperlink hp = new Hyperlink(c, c); hp.setStyleName("hyperlink"); if (c == "A") { hp.setStyleName("selected"); } hp.addClickHandler(new ClickHandler() { public void onClick(ClickEvent e) { Iterator<Widget> it = alphabetGrid.iterator(); while (it.hasNext()) { Hyperlink hp = (Hyperlink) it.next(); if ((hp.getStyleName()).equals("selected")) { hp.setStyleName("hyperlink"); break; } } hp.setStyleName("selected"); subAlpha = hp.getText(); getAndDisplayConcepts(currentViewing.toString(), subAlpha .toString()); } }); alphabetGrid.setWidget(i, j, hp); j++; if (j == 13) { i++; j = 0; } } } private void initBrowsingTab() { for (final String c : openedVocabularies) { Hyperlink hp = new Hyperlink(c.toUpperCase(), c.toUpperCase()); hp.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { // TODO Auto-generated method stub currentViewing = c.toUpperCase(); getAndDisplayConcepts(currentViewing.toString(), subAlpha.toString()); } }); browsingTab.addTab(hp); } int index = openedVocabularies.indexOf(currentViewing.toLowerCase()); browsingTab.selectTab(index); getAndDisplayConcepts(currentViewing.toString(), subAlpha.toString()); } public void onValueChange(ValueChangeEvent<String> event) { // TODO Auto-generated method stub // Window.alert(event.getValue()); } private void getAndDisplayConcepts(String vocabulary, String letter) { final Tree topSub = new Tree(); conceptList.clear(); conceptList.add(loadingBar); conceptBrowserService.getSubTopConcept(vocabulary.toLowerCase(), letter.toLowerCase(), true, new AsyncCallback<List<ConceptProxy>>() { @Override public void onFailure(Throwable caught) { // TODO Auto-generated method stub } @Override public void onSuccess(List<ConceptProxy> result) { // TODO Auto-generated method stub conceptList.clear(); conceptList.add(topSub); Iterator<ConceptProxy> it = result.iterator(); while (it.hasNext()) { ConceptProxy thisfather = it.next(); String forigin = thisfather.getOrigin(); String fpreLabel = thisfather.getPreLabel(); String fURI = thisfather.getURI(); String[] furis = fURI.split(" "); String fnamespaceURI = furis[0]; String flocalPart = furis[1]; final ConceptLink fcpl = new ConceptLink(forigin, fnamespaceURI, flocalPart, fpreLabel, forigin + ":" + flocalPart); fcpl.addClickHandler(new ConceptHandler(fcpl.getNamespaceURI(), fcpl.getlocalPart())); final TreeItem fitem = new TreeItem(fcpl); boolean isleaf = thisfather.getIsLeaf(); if (isleaf == false) { TreeItem fakeItem = new TreeItem(); fitem.addItem(fakeItem); } topSub.addItem(fitem); } } }); topSub.addOpenHandler(new OpenHandler<TreeItem>() { @Override public void onOpen(OpenEvent<TreeItem> event) { // TODO Auto-generated method stub final TreeItem thisItem = event.getTarget(); int count = thisItem.getChildCount(); if (count == 1) { thisItem.removeItems(); ConceptLink hp = (ConceptLink) thisItem.getWidget(); String namespaceURI = hp.getNamespaceURI(); String localPart = hp.getlocalPart(); conceptBrowserService.getChildConcept(namespaceURI, localPart, new AsyncCallback<List<ConceptProxy>>() { @Override public void onFailure(Throwable caught) { // TODO Auto-generated method stub TreeItem error = new TreeItem(messages.conceptbrowser_cannotLoadError() ); thisItem.addItem(error); thisItem.setState(true, false); } @Override public void onSuccess(List<ConceptProxy> result) { // TODO Auto-generated method stub if (result != null) { for (ConceptProxy cp : result) { String origin = cp.getOrigin(); String preLabel = cp.getPreLabel(); String URI = cp.getURI(); String[] uris = URI.split(" "); String namespace = uris[0]; String lp = uris[1]; final ConceptLink cpl = new ConceptLink(origin, namespace, lp, preLabel, origin + ":" + lp); cpl.addClickHandler(new ConceptHandler(namespace, lp)); final TreeItem citem = new TreeItem(cpl); boolean isleaf = cp.getIsLeaf(); if (isleaf == false) { TreeItem fakeItem = new TreeItem(); citem.addItem(fakeItem); } thisItem.addItem(citem); } } } }); } } }); } private class ConceptHandler implements ClickHandler { private String namespaceURI; private String localPart; private ConceptHandler(String uri, String lp) { this.namespaceURI = uri; this.localPart = lp; } @Override public void onClick(ClickEvent event) { conceptBrowserService.getConceptByURI(namespaceURI, localPart, new AsyncCallback<ConceptProxy>() { @Override public void onFailure(Throwable caught) { // TODO Auto-generated method stub Window.alert(caught.getMessage()); } @Override public void onSuccess(ConceptProxy result) { // TODO Auto-generated method stub displayConceptInfo(result); } }); } } private class SKOSHandler implements ClickHandler { private String SKOSCode; public SKOSHandler(String SKOSCode) { super(); this.SKOSCode = SKOSCode; } public void onClick(ClickEvent event) { // TODO Auto-generated method stub final DecoratedPopupPanel skosDlg = new DecoratedPopupPanel(false); skosDlg.setAnimationEnabled(false); skosDlg.setGlassEnabled(true); TextArea skos = new TextArea(); skos.setSize("650px", "400px"); skos.setValue(SKOSCode); PushButton closeButton = new PushButton(new Image("./img/closebutton.png")); closeButton.addStyleName("close-button"); closeButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { // TODO Auto-generated method stub skosDlg.removeFromParent(); } }); DockPanel dock = new DockPanel(); dock.add(closeButton,DockPanel.NORTH); dock.add(skos, DockPanel.CENTER); dock.setCellHorizontalAlignment(closeButton, HasHorizontalAlignment.ALIGN_RIGHT); dock.setCellWidth(closeButton, "20px"); skosDlg.add(dock); skosDlg.show(); skosDlg.center(); } } private void loadingResultList(final String query) { searchResult.setHeaderText(query); searchResult.setContent(resultList); searchResult.setFiltering(captionForFiltering); resultList.clear(); resultList.add(this.loadingBar2); if (searchResult.getIsOpened() == false) { conceptDetail.insert(searchResult, 0); searchResult.setIsOpened(true); } conceptBrowserService.searchForConcept(query, openedVocabularies, new AsyncCallback<List<ConceptProxy>>() { @Override public void onFailure(Throwable caught) { // TODO Auto-generated method stub HTML reminder = new HTML( "<span style = 'color:red'>" + messages.conceptbrowser_serverDownError() + "</span>"); resultList.clear(); filteringPanel.clear(); resultList.add(reminder); } @Override public void onSuccess(List<ConceptProxy> result) { // TODO Auto-generated method stub if (result.size() == 0) { HTML reminder = new HTML( "<span style = 'color:red'>" + messages.conceptbrowser_noresults() + "</span>"); resultList.clear(); filteringPanel.clear(); resultList.add(reminder); } else { //Display the first concept on the list ConceptProxy c = result.get(0); //displayConceptInfo(c); displayFullConcept(c); resultStorage = result; resultList.clear(); if (filteringVocabularies == null) filteringVocabularies = new ArrayList<String>(); else filteringVocabularies.clear(); FlexTable resulttable = new FlexTable(); resultList.add(resulttable); int i = 0; for (ConceptProxy cp : result) { String origin = cp.getOrigin(); if (filteringVocabularies.contains(origin) == false) { filteringVocabularies.add(origin); } String preLabel = cp.getPreLabel(); String uri = cp.getURI(); String[] tokens = uri.split(" "); String namespaceURI = tokens[0]; String lp = tokens[1]; ConceptLink cpl = new ConceptLink(origin, namespaceURI, lp, preLabel, origin + ":" + lp); cpl.setWidth("300px"); cpl.addClickHandler(new ConceptHandler(namespaceURI, lp)); cpl.setTitle(preLabel); Label originlb = new Label(origin); resulttable.setWidget(i, 0, originlb); resulttable.setWidget(i, 1, cpl); i++; } for (int j = 0; j < resulttable.getRowCount(); j++) { resulttable.getCellFormatter().addStyleName(j, 0, "origin-style"); resulttable.getCellFormatter().addStyleName(j, 1, "concept-style"); } filteringPanel.clear(); for (String ori : filteringVocabularies) { final CheckBox check = new CheckBox(ori); check.setValue(true); check.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { // TODO Auto-generated method stub Boolean isChecked = check.getValue(); String voc = check.getText(); resultList.clear(); FlexTable flex = new FlexTable(); if (!isChecked) { filteringVocabularies.remove(voc); } else { filteringVocabularies.add(voc); } int i = 0; for (ConceptProxy c : resultStorage) { String origin = c.getOrigin(); if (filteringVocabularies.contains(origin)) { flex.setText(i, 0, c .getOrigin()); String preLabel = c .getPreLabel(); String uri = c.getURI(); String[] tokens = uri .split(" "); String namespaceURI = tokens[0]; String lp = tokens[1]; ConceptLink cpl = new ConceptLink( origin, namespaceURI, lp, preLabel, origin + ":" + lp); cpl.addClickHandler(new ConceptHandler( namespaceURI, lp)); flex.setWidget(i, 1, cpl); i++; } } for (int j = 0; j < flex.getRowCount(); j++) { flex.getCellFormatter() .addStyleName(j, 0, "origin-style"); flex.getCellFormatter() .addStyleName(j, 1, "concept-style"); } resultList.add(flex); } }); filteringPanel.add(check); } } } }); } private class ConfirmDialog extends DecoratedPopupPanel { String associateVoc; int vocIndex; public ConfirmDialog(final HorizontalPanel toBeDeleted, final ToggleButton trigger, String vocabulary, boolean autohide, boolean modal) { super(autohide, modal); associateVoc = vocabulary; vocIndex = openedVocabularies.indexOf(associateVoc.toLowerCase()); com.google.gwt.user.client.ui.Button yesBtn = new com.google.gwt.user.client.ui.Button( messages.conceptbrowser_yes() ); com.google.gwt.user.client.ui.Button cancelBtn = new com.google.gwt.user.client.ui.Button( messages.conceptbrowser_cancel()); VerticalPanel vp = new VerticalPanel(); vp.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); vp.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER); vp.setSpacing(10); HTML msg = new HTML(messages.conceptbrowser_areYouSure(associateVoc), true); vp.add(msg); yesBtn.addClickHandler(new ClickHandler() { public void onClick(ClickEvent e) { trigger.setDown(true); toBeDeleted.removeFromParent(); ConfirmDialog.this.hide(); browsingTab.removeTab(vocIndex); conceptList.clear(); /* Delete the vocabulary from UI */ openedVocabularies.remove(vocIndex); if(browsingTab.getTabCount() != 0) { browsingTab.selectTab(0); getAndDisplayConcepts(openedVocabularies.get(0).toUpperCase(), subAlpha); } else { conceptList.add(new Label(messages.conceptbrowser_noVocabularies())); } } }); cancelBtn.addClickHandler(new ClickHandler() { public void onClick(ClickEvent e) { trigger.setDown(false); ConfirmDialog.this.hide(); } }); HorizontalPanel opr = new HorizontalPanel(); opr.setSpacing(10); opr.add(yesBtn); opr.add(cancelBtn); vp.add(opr); this.add(vp); } public void show() { super.show(); } public void hide() { super.hide(); } } private void displayFullConcept(ConceptProxy result) { String uri = result.getURI(); String[] tokens = uri.split(" "); String namespaceURI = tokens[0]; String localPart = tokens[1]; conceptBrowserService.getConceptByURI(namespaceURI, localPart, new AsyncCallback<ConceptProxy>() { @Override public void onFailure(Throwable caught) { Window.alert(caught.getMessage()); } @Override public void onSuccess(ConceptProxy result) { displayConceptInfo(result); } }); } private void displayConceptInfo(ConceptProxy result) { conceptInfo.clear(); VerticalPanel vp = new VerticalPanel(); VerticalPanel header = new VerticalPanel(); Label htext = new Label(result.getOrigin() + "->" + result.getPreLabel()); htext.addStyleName("concept-name-style"); Button showSKOSBtn = new Button(messages.conceptbrowser_viewSKOS()); showSKOSBtn.setStyleName("skos-btn"); showSKOSBtn.addClickHandler(new SKOSHandler(result.getSkosCode())); header.addStyleName("concept-name-header"); header.add(htext); header.add(showSKOSBtn); header.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); header.setCellHorizontalAlignment(showSKOSBtn, HasHorizontalAlignment.ALIGN_RIGHT); header.addStyleName("concept-header"); header.setWidth("100%"); vp.add(header); Label preLabel = new Label(result.getPreLabel()); FlexTable conceptTable = new FlexTable(); conceptTable.setText(0, 0, messages.conceptbrowser_prefLabel()); conceptTable.setWidget(0, 1, preLabel); conceptTable.setText(1, 0, messages.conceptbrowser_uri() ); conceptTable.setText(1, 1, result.getURI()); List<String> altLabel = result.getAltLabel(); conceptTable.setText(2, 0, messages.conceptbrowser_altLabel() ); String altlabels = ""; if (altLabel != null) { for (String c : altLabel) { altlabels = altlabels + c + "; "; } } else { altlabels = messages.conceptbrowser_noAltLabels(); } conceptTable.setText(2, 1, altlabels); HashMap<String, String> broader = result.getBroader(); conceptTable.setText(3, 0, messages.conceptbrowser_broaderConcepts() ); if (broader != null) { FlowPanel broaderPanel = new FlowPanel(); Set<String> keys = broader.keySet(); int i = 0; for (final String key : keys) { i++; String uri = broader.get(key); String[] tokens = uri.split(" "); String namespaceURI = tokens[0]; String localPart = tokens[1]; ConceptLink hp = new ConceptLink(namespaceURI, localPart, key, currentViewing + ":" + localPart); hp.addClickHandler(new ConceptHandler(namespaceURI, localPart)); hp.addStyleName("Hyperlink-trick"); broaderPanel.add(hp); } conceptTable.setWidget(3, 1, broaderPanel); } else { conceptTable.setText(3, 1, messages.conceptbrowser_noBroaders()); } conceptTable.setText(4, 0, messages.conceptbrowser_narrowerConcepts()); HashMap<String, String> narrower = result.getNarrower(); if (narrower != null) { FlowPanel narrowerPanel = new FlowPanel(); Set<String> keys = narrower.keySet(); for (String key : keys) { String uri = narrower.get(key); String[] tokens = uri.split(" "); String namespaceURI = tokens[0]; String localPart = tokens[1]; ConceptLink hp = new ConceptLink(namespaceURI, localPart, key, currentViewing + ":" + localPart); hp.addClickHandler(new ConceptHandler(namespaceURI, localPart)); hp.addStyleName("Hyperlink-trick"); narrowerPanel.add(hp); } conceptTable.setWidget(4, 1, narrowerPanel); } else { conceptTable.setText(4, 1, messages.conceptbrowser_noNarrowers()); } HashMap<String, String> related = result.getRelated(); conceptTable.setText(5, 0, messages.conceptbrowser_relatedConceptsj()); if (related != null) { FlowPanel relatedPanel = new FlowPanel(); Set<String> keys = related.keySet(); for (String key : keys) { String uri = related.get(key); String[] tokens = uri.split(" "); String namespaceURI = tokens[0]; String localPart = tokens[1]; ConceptLink hp = new ConceptLink(namespaceURI, localPart, key, currentViewing + ":" + localPart); hp.addClickHandler(new ConceptHandler(namespaceURI, localPart)); hp.addStyleName("Hyperlink-trick"); relatedPanel.add(hp); conceptTable.setWidget(5, 1, relatedPanel); } } else { conceptTable.setText(5, 1, messages.conceptbrowser_noRelated()); } List<String> scopeNotes = result.getScopeNotes(); conceptTable.setText(6, 0, messages.conceptbrowser_scoreNotes()); String sn = ""; if (scopeNotes != null) { for (String s : scopeNotes) { sn = sn + s + "; "; } } else { sn = messages.conceptbrowser_noScopeNotes(); } conceptTable.setText(6, 1, sn); conceptTable.setWidth("580px"); conceptTable.setCellSpacing(0); conceptTable.addStyleName("concept-table"); for (int j = 0; j < conceptTable.getRowCount(); j++) { conceptTable.getCellFormatter().addStyleName(j, 0, "table-heading"); conceptTable.getCellFormatter().addStyleName(j, 1, "common-row"); if ((j % 2) == 0) { conceptTable.getRowFormatter().addStyleName(j, "even-row"); } else { conceptTable.getRowFormatter().addStyleName(j, "uneven-row"); } } vp.add(conceptTable); conceptInfo.add(vp); } private static native String getParamString () /*-{ return $wnd.location.search; }-*/; class OpenNewVocabularyHandler implements ClickHandler { public void onClick(ClickEvent event) { final PopupPanel pop = new PopupPanel(true, false); pop.addStyleName("add-pop"); addVocabularyPanel.clear(); addVocabularyPanel.removeFromParent(); for (final String c : allVocabulary) { if (!openedVocabularies.contains(c.toLowerCase())) { final Hyperlink hp = new Hyperlink(c.toUpperCase(), c.toUpperCase()); hp.addClickHandler(new ClickHandler() { public void onClick(ClickEvent e) { openedVocabularies.add(c.toLowerCase()); currentViewing = c.toUpperCase(); final ToggleButton closeVocabulary = new ToggleButton( new Image("./img/close.jpg"), new Image("./img/disabled.jpg")); Label vname = new Label(c.toUpperCase()); vname.addStyleName("vname"); final HorizontalPanel vpanel = new HorizontalPanel(); vpanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_TOP); vpanel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT); vpanel.addStyleName("vocabularyMenu"); vpanel.add(closeVocabulary); vpanel.add(vname); configure.insert(vpanel, configure.getWidgetCount() - 2); pop.hide(); final Hyperlink newtabhead = new Hyperlink(c.toUpperCase(), c.toUpperCase()); browsingTab.addTab(newtabhead); browsingTab.selectTab(browsingTab.getTabCount()-1); getAndDisplayConcepts(currentViewing.toString(), subAlpha.toString()); newtabhead.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { // TODO Auto-generated method stub currentViewing = c.toUpperCase(); getAndDisplayConcepts(currentViewing.toString(), subAlpha.toString()); } }); closeVocabulary.addClickHandler(new ClickHandler() { public void onClick(ClickEvent e) { if (closeVocabulary.isDown()) { closeVocabulary.setDown(false); ConfirmDialog dlg = new ConfirmDialog(vpanel,closeVocabulary, c,false, true); dlg.show(); dlg.center(); } else { openedVocabularies.add(c.toLowerCase()); final Hyperlink hp = new Hyperlink(c, c); hp.addClickHandler(new ClickHandler() { @Override public void onClick( ClickEvent event) { currentViewing = c; getAndDisplayConcepts( currentViewing .toString(), subAlpha .toString()); } }); browsingTab.addTab(hp); } } }); } }); addVocabularyPanel.add(hp); } } if (addVocabularyPanel.getWidgetCount() == 0) { Label msg = new Label(messages.conceptbrowser_allVocabOpen()); addVocabularyPanel.add(msg); } pop.add(addVocabularyPanel); pop.setPopupPosition(openNewVocabulary.getAbsoluteLeft() + 12, openNewVocabulary.getAbsoluteTop() + 11); pop.show(); } } }