#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* This is part of Geomajas, a GIS framework, http://www.geomajas.org/.
*
* Copyright 2008-2015 Geosparc nv, http://www.geosparc.com/, Belgium.
*
* The program is available in open source according to the GNU Affero
* General Public License. All contributions in this program are covered
* by the Geomajas Contributors License Agreement. For full licensing
* details, see LICENSE.txt in the project root.
*/
package ${package}.client;
import com.google.gwt.user.client.Cookies;
import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.widgets.Window;
import com.smartgwt.client.widgets.layout.Layout;
import org.geomajas.gwt.client.command.CommunicationExceptionCallback;
import org.geomajas.gwt.client.command.GwtCommandDispatcher;
import org.geomajas.gwt.client.i18n.I18nProvider;
import org.geomajas.gwt.client.map.event.MapModelChangedEvent;
import org.geomajas.gwt.client.map.event.MapModelChangedHandler;
import org.geomajas.gwt.client.util.CrocEyeNotificationHandler;
import org.geomajas.gwt.client.util.Log;
import org.geomajas.gwt.client.util.Notify;
import org.geomajas.gwt.client.util.WidgetLayout;
import org.geomajas.gwt.client.widget.MapWidget;
import org.geomajas.gwt.client.widget.OverviewMap;
import com.google.gwt.core.client.EntryPoint;
import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.VLayout;
import org.geomajas.widget.advancedviews.client.widget.ExpandingThemeWidget;
import org.geomajas.widget.advancedviews.configuration.client.ThemesInfo;
import org.geomajas.widget.featureinfo.client.widget.DockableWindow;
import org.geomajas.widget.layer.client.widget.CombinedLayertree;
import org.geomajas.widget.searchandfilter.client.util.GsfLayout;
import org.geomajas.widget.searchandfilter.client.util.SearchCommService;
import org.geomajas.widget.searchandfilter.client.widget.attributesearch.AttributeSearchCreator;
import org.geomajas.widget.searchandfilter.client.widget.attributesearch.AttributeSearchPanel;
import org.geomajas.widget.searchandfilter.client.widget.geometricsearch.FreeDrawingSearch;
import org.geomajas.widget.searchandfilter.client.widget.geometricsearch.GeometricSearchCreator;
import org.geomajas.widget.searchandfilter.client.widget.geometricsearch.GeometricSearchPanel;
import org.geomajas.widget.searchandfilter.client.widget.geometricsearch.GeometricSearchPanelCreator;
import org.geomajas.widget.searchandfilter.client.widget.geometricsearch.SelectionSearch;
import org.geomajas.widget.searchandfilter.client.widget.multifeaturelistgrid.MultiFeatureListGrid;
import org.geomajas.widget.searchandfilter.client.widget.search.CombinedSearchCreator;
import org.geomajas.widget.searchandfilter.client.widget.search.CombinedSearchPanel;
import org.geomajas.widget.searchandfilter.client.widget.search.DockableWindowSearchWidget;
import org.geomajas.widget.searchandfilter.client.widget.search.SearchEvent;
import org.geomajas.widget.searchandfilter.client.widget.search.SearchHandler;
import org.geomajas.widget.searchandfilter.client.widget.search.SearchWidget;
import org.geomajas.widget.searchandfilter.client.widget.search.SearchWidgetRegistry;
import org.geomajas.widget.utility.gwt.client.ribbon.RibbonBarLayout;
import org.geomajas.widget.utility.gwt.client.util.GuwLayout;
/**
* Entry point and main class for GWT application. This class defines the layout and functionality of this application.
*
* @author geomajas-gwt-archetype
*/
public class Application implements EntryPoint {
private Window searchResult;
private MapWidget map;
private OverviewMap overviewMap;
private MultiFeatureListGrid searchResultGrid;
public void onModuleLoad() {
initializeConstants();
// Build all layout blocks.
Layout header = createHeader();
Layout footer = createFooter();
HLayout layoutRibbon = new HLayout();
layoutRibbon.setAlign(Alignment.CENTER);
VLayout layoutWest = new VLayout();
layoutWest.addStyleName("applicationLayoutWest");
VLayout layoutCenter = new VLayout();
layoutCenter.addStyleName("applicationLayoutCenter");
VLayout mainLayout = new VLayout();
layoutRibbon.setHeight(85);
layoutRibbon.setOverflow(Overflow.HIDDEN);
// layoutNorth.addMember(layoutNorthWest);
// layoutNorth.addMember(layoutNorthCenter);
// layoutNorth.addMember(layoutNorthEast);
HLayout middle = new HLayout();
middle.setHeight("*");
layoutWest.setWidth(300);
middle.addMember(layoutWest);
middle.addMember(layoutCenter);
mainLayout.addMember(header);
mainLayout.addMember(layoutRibbon);
mainLayout.addMember(middle);
mainLayout.addMember(footer);
mainLayout.addStyleName("applicationLayoutBody");
mainLayout.setWidth100();
mainLayout.setHeight100();
// ---------------------------------------------------------------------
// Create the left-side (map and tabs):
// ---------------------------------------------------------------------
map = new MapWidget("mapMain", "app");
GsfLayout.searchWindowParentElement = map;
// -- Create Ribbon
final RibbonBarLayout ribbonBar = new RibbonBarLayout(map, "app", "ribbon-bar");
ribbonBar.setAlign(Alignment.CENTER);
ribbonBar.setOverflow(Overflow.HIDDEN);
ribbonBar.setStyleName("msRibbon");
ribbonBar.setMembersMargin(0);
ribbonBar.setHeight(100);
// LayerTree layout:
CombinedLayertree layerTree = getCombinedLayertree();
layoutRibbon.addMember(ribbonBar);
layoutWest.addMember(layerTree);
layoutCenter.addMember(map);
mainLayout.draw();
initialize();
}
private CombinedLayertree getCombinedLayertree() {
// if (!map.getMapModel().getMapInfo().getWidgetInfo().containsKey(ClientLayerTreeInfo.IDENTIFIER)) {
// ClientBranchNodeInfo rootNode = new ClientBranchNodeInfo();
// for (Layer layer : map.getMapModel().getLayers()) {
// ClientLayerNodeInfo node = new ClientLayerNodeInfo();
// node.setLayerId(layer.getId());
// rootNode.getTreeNodes().add(node);
// }
// ClientLayerTreeInfo clti = new ClientLayerTreeInfo();
// clti.setTreeNode(rootNode);
// map.getMapModel().getMapInfo().getWidgetInfo().put(ClientLayerTreeInfo.IDENTIFIER, clti);
// }
return new CombinedLayertree(map);
}
private void addThemeWidget() {
if (map.getMapModel().getMapInfo().getWidgetInfo().containsKey(ThemesInfo.IDENTIFIER)) {
ExpandingThemeWidget themes = new ExpandingThemeWidget(map);
themes.setParentElement(map);
themes.setSnapTo("BL");
themes.setSnapOffsetTop(-50);
themes.setSnapOffsetLeft(10);
themes.setShowShadow(false);
}
}
private Layout createFooter() {
Layout footer = new Layout();
footer.setHeight(10);
footer.addStyleName("applicationLayoutHeaderBar");
return footer;
}
private Layout createHeader() {
VLayout headerLayout = new VLayout();
headerLayout.setHeight(5 + 52 + 5);
Layout topBlackBar = new Layout();
topBlackBar.addStyleName("applicationLayoutHeaderBar");
topBlackBar.setHeight(5);
HLayout header = new HLayout();
header.addStyleName("applicationLayoutHeader");
header.setHeight(52);
Layout bottomBlackBar = new Layout();
bottomBlackBar.addStyleName("applicationLayoutHeaderBar");
bottomBlackBar.setHeight(5);
headerLayout.addMember(topBlackBar);
headerLayout.addMember(header);
headerLayout.addMember(bottomBlackBar);
return headerLayout;
}
private void initializeConstants() {// register Global layout stuff
GuwLayout.ribbonBarInternalMargin = 2;
GuwLayout.ribbonGroupInternalMargin = 4;
GuwLayout.DropDown.ribbonBarDropDownButtonDescriptionIconSize = 24;
GuwLayout.ribbonTabOverflow = Overflow.HIDDEN;
GsfLayout.searchWindowPositionType = DockableWindowSearchWidget.SearchWindowPositionType.SNAPTO;
GsfLayout.searchWindowPosSnapTo = "TR";
// GsfLayout.searchWindowPosLeft = -25;
SearchCommService.searchResultSize = 500;
//Register crock eye notificator.
Notify.getInstance().setHandler(CrocEyeNotificationHandler.getInstance());
GwtCommandDispatcher.getInstance().setCommandExceptionCallback(CrocEyeNotificationHandler.getInstance());
GwtCommandDispatcher.getInstance().setCommunicationExceptionCallback(new CommunicationExceptionCallback() {
@Override
public void onCommunicationException(Throwable error) {
// Hide communication errors from the user, but report to server (try once)
String msg = I18nProvider.getGlobal().commandCommunicationError() + ":${symbol_escape}n" + error.getMessage();
Log.logError(msg, error);
}
});
WidgetLayout.crocEyePositionLeft = 150;
GuwLayout.DropDown.showDropDownImage = false;
Cookies.setCookie("skin_name", "Enterprise");
}
public void initialize() {
initializeSearches();
map.getMapModel().addMapModelChangedHandler(new MapModelChangedHandler() {
public void onMapModelChanged(MapModelChangedEvent event) {
PanAndZoomSlider.addPanAndZoomSliderTo(map);
addThemeWidget();
}
});
}
private void initializeSearches() {
// ---------------------------------------------------------------------
// Create dataGrid where result will be shown
// ---------------------------------------------------------------------
setSearchResult(new DockableWindow());
getSearchResult().setTitle("Search results"); // MESSAGES.searchResults());
getSearchResult().setWidth(650);
getSearchResult().setHeight(300);
getSearchResult().moveTo(50, 75);
getSearchResult().setKeepInParentRect(true);
getSearchResult().setCanDragResize(true);
setSearchResultGrid(new MultiFeatureListGrid(map));
getSearchResultGrid().setClearTabsetOnSearch(true);
getSearchResultGrid().setShowDetailsOnSingleResult(true);
getSearchResultGrid().setShowCsvExportAction(false);
getSearchResult().addItem(getSearchResultGrid());
// ---------------------------------------------------------------------
// Create Searchpanels
// ---------------------------------------------------------------------
SearchWidgetRegistry.initialize(map, getSearchResultGrid(), false);
SearchWidgetRegistry.put(new AttributeSearchCreator() {
public SearchWidget createInstance(MapWidget mapWidget) {
AttributeSearchPanel asp = new AttributeSearchPanel(mapWidget);
asp.setCanAddToFavourites(false);
return new DockableWindowSearchWidget(IDENTIFIER, getSearchWidgetName(), asp);
}
});
SearchWidgetRegistry.put(new GeometricSearchCreator(new GeometricSearchPanelCreator() {
public GeometricSearchPanel createInstance(MapWidget mapWidget) {
GeometricSearchPanel gsp = new GeometricSearchPanel(mapWidget);
gsp.setCanAddToFavourites(false);
gsp.addSearchMethod(new FreeDrawingSearch());
gsp.addSearchMethod(new SelectionSearch());
return gsp;
}
}));
SearchWidgetRegistry.put(new CombinedSearchCreator() {
public SearchWidget createInstance(MapWidget mapWidget) {
CombinedSearchPanel csp = new CombinedSearchPanel(mapWidget);
csp.initializeListUseAll();
csp.setCanAddToFavourites(false);
return new DockableWindowSearchWidget(IDENTIFIER, getSearchWidgetName(), csp);
}
});
// -- show resultgrid after search is finished
SearchWidgetRegistry.addSearchHandler(new SearchHandler() {
public void onSearchStart(SearchEvent event) {
}
public void onSearchDone(SearchEvent event) {
// handled by featureListGrid, no need for us to do something
}
public void onSearchEnd(SearchEvent event) {
if (!(getSearchResultGrid().isShowDetailsOnSingleResult() && event.isSingleResult())) {
showSearchResultWindow();
}
}
});
}
/**
* @param searchResultGrid
* the searchResultGrid to set
*/
protected void setSearchResultGrid(MultiFeatureListGrid searchResultGrid) {
this.searchResultGrid = searchResultGrid;
}
/**
* @return the searchResultGrid
*/
protected MultiFeatureListGrid getSearchResultGrid() {
return searchResultGrid;
}
public void showSearchResultWindow() {
searchResult.show();
searchResult.bringToFront();
}
/**
* @return the searchResult
*/
protected Window getSearchResult() {
return searchResult;
}
/**
* @param searchResult
* the searchResult to set
*/
protected void setSearchResult(Window searchResult) {
this.searchResult = searchResult;
}
}