envelopePanel.setRequired(true);
envelopePanel.setCRSFieldVisible(true);
envelopePanel.setCrsRequired(true);
envelopePanel.setOutputMarkupId( true );
form.add(new GeoServerAjaxFormLink( "generateBounds") {
@Override
public void onClick(AjaxRequestTarget target, Form form) {
// build a layer group with the current contents of the group
LayerGroupInfo lg = getCatalog().getFactory().createLayerGroup();
for ( EoLayerGroupEntry entry : lgEntryPanel.getEntries() ) {
lg.getLayers().add(entry.getLayer());
lg.getStyles().add(entry.getStyle());
}
try {
// grab the eventually manually inserted
CoordinateReferenceSystem crs = envelopePanel.getCoordinateReferenceSystem();
if ( crs != null ) {
//ensure the bounds calculated in terms of the user specified crs
new CatalogBuilder( getCatalog() ).calculateLayerGroupBounds( lg, crs );
}
else {
//calculate from scratch
new CatalogBuilder( getCatalog() ).calculateLayerGroupBounds( lg );
}
envelopePanel.setModelObject( lg.getBounds() );
target.addComponent( envelopePanel );
}
catch (Exception e) {
throw new WicketRuntimeException( e );
}
}
});
form.add(lgEntryPanel = new EoLayerGroupEntryPanel( "layers", layerGroup, popupWindow ));
lgEntryPanel.setOutputMarkupId(true);
EoLayerTypeRenderer eoLayerTypeRenderer = new EoLayerTypeRenderer();
final DropDownChoice<EoLayerType> layerTypes = new DropDownChoice<EoLayerType>("layerType", EoLayerType.getRegularTypes(), eoLayerTypeRenderer);
layerTypes.setModel(new Model<EoLayerType>(null));
layerTypes.setOutputMarkupId(true);
form.add(layerTypes);
final GeoServerAjaxFormLink createStoreLink = new GeoServerAjaxFormLink( "createStore" ) {
@Override
public void onClick(AjaxRequestTarget target, Form form) {
final String layerGroupName = getNonNullGroupName(target);
if(layerGroupName != null) {
CoverageStoreNewPage coverageStoreCreator = new CoverageStoreNewPage(new ImageMosaicFormat().getName()) {
protected void onSuccessfulSave(org.geoserver.catalog.CoverageStoreInfo info, org.geoserver.catalog.Catalog catalog, org.geoserver.catalog.CoverageStoreInfo savedStore) {
EoCoverageSelectorPage page = new EoCoverageSelectorPage(EoLayerGroupAbstractPage.this, layerGroupName, savedStore.getId());
setResponsePage(page);
};
};
setResponsePage(coverageStoreCreator);
} else {
dialog.showInfo(target, null, new ParamResourceModel("layerInfoTitle", EoLayerGroupAbstractPage.this), new ParamResourceModel("provideGroupName", EoLayerGroupAbstractPage.this));
}
}
};
createStoreLink.setOutputMarkupId(true);
form.add( createStoreLink);
final GeoServerAjaxFormLink addFromStoreLink = new GeoServerAjaxFormLink( "addFromStore" ) {
@Override
public void onClick(AjaxRequestTarget target, Form form) {
final String layerGroupName = getNonNullGroupName(target);
if(layerGroupName != null) {
EoCoverageSelectorPage page = new EoCoverageSelectorPage(EoLayerGroupAbstractPage.this, layerGroupName);
setResponsePage(page);
} else {
dialog.showInfo(target, null, new ParamResourceModel("layerInfoTitle", EoLayerGroupAbstractPage.this), new ParamResourceModel("provideGroupName", EoLayerGroupAbstractPage.this));
}
}
};
addFromStoreLink.setOutputMarkupId(true);
form.add( addFromStoreLink);
final GeoServerAjaxFormLink addLayerLink = new GeoServerAjaxFormLink( "addLayer" ) {
@Override
public void onClick(AjaxRequestTarget target, Form form) {
popupWindow.setInitialHeight( 375 );
popupWindow.setInitialWidth( 525 );
popupWindow.setTitle(new ParamResourceModel("chooseLayer", this));
layerTypes.processInput();
final EoLayerType layerType = layerTypes.getModelObject();
popupWindow.setContent( new EoLayerListPanel(popupWindow.getContentId(), layerType, lgEntryPanel.entryProvider) {
@Override
protected void handleLayer(LayerInfo layer, AjaxRequestTarget target) {
popupWindow.close( target );
layer.getMetadata().put(EoLayerType.KEY, layerType);
lgEntryPanel.entryProvider.getItems().add(
new EoLayerGroupEntry( layer, layer.getDefaultStyle(), groupName));
target.addComponent(lgEntryPanel);
layerTypes.setDefaultModelObject(layerTypes.getDefaultModelObject());
target.addComponent(layerTypes);
}
});
popupWindow.show(target);
}
};
addLayerLink.setEnabled(false);
form.add( addLayerLink);
final DropDownChoice<EoLayerGroupEntry> outlinesEntryChooser = new DropDownChoice<EoLayerGroupEntry>("sourceLayer", new OutlineSourceModel(lgEntryPanel.items), new LayerGroupEntryRenderer());
outlinesEntryChooser.setModel(new Model<EoLayerGroupEntry>(null));
outlinesEntryChooser.setOutputMarkupId(true);
outlinesEntryChooser.setEnabled(!outlinesPresent(lgEntryPanel.items));
form.add(outlinesEntryChooser);
outlinesEntryChooser.add(new AjaxFormComponentUpdatingBehavior("onchange") {
@Override
protected void onUpdate(AjaxRequestTarget target) {
wsChoice.processInput();
WorkspaceInfo ws = (WorkspaceInfo) wsChoice.getDefaultModelObject();
outlinesEntryChooser.processInput();
EoLayerGroupEntry entry = outlinesEntryChooser.getModelObject();
try {
EoCatalogBuilder builder = new EoCatalogBuilder(getCatalog());
CoverageInfo coverage = (CoverageInfo) ((LayerInfo) entry.getLayer()).getResource();
CoverageStoreInfo store = coverage.getStore();
String url = store.getURL();
StructuredGridCoverage2DReader reader = (StructuredGridCoverage2DReader) coverage.getGridCoverageReader(null, null);
LayerInfo layer = builder.createEoOutlineLayer(url, ws, groupName, coverage.getNativeCoverageName(), reader);
lgEntryPanel.items.add(new EoLayerGroupEntry(layer, layer.getDefaultStyle(), groupName));
} catch(Exception e) {
LOGGER.log(Level.SEVERE, "Failed to create outlines layer", e);
String layerName = entry.getLayer().prefixedName();
error(new ParamResourceModel("outlinesCreationError", EoLayerGroupAbstractPage.this, layerName, e.getMessage()).getString());
} finally {
outlinesEntryChooser.setDefaultModelObject(null);
}
target.addComponent(lgEntryPanel);
target.addComponent(getFeedbackPanel());
target.addComponent(outlinesEntryChooser);
}
});
layerTypes.add(new AjaxFormComponentUpdatingBehavior("onchange") {
@Override
protected void onUpdate(AjaxRequestTarget target) {
layerTypes.processInput();
boolean input = layerTypes.getModelObject() != null;
addLayerLink.setEnabled(input);
target.addComponent(addLayerLink);
}
});