/* (c) 2014 - 2016 Open Source Geospatial Foundation - all rights reserved
* (c) 2001 - 2013 OpenPlans
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.web.data.store;
import static org.geoserver.web.data.store.StoreProvider.ENABLED;
import static org.geoserver.web.data.store.StoreProvider.NAME;
import static org.geoserver.web.data.store.StoreProvider.WORKSPACE;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
import org.apache.wicket.markup.html.image.Image;
import org.apache.wicket.markup.html.panel.Fragment;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.ResourceModel;
import org.apache.wicket.request.resource.PackageResourceReference;
import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.CoverageStoreInfo;
import org.geoserver.catalog.DataStoreInfo;
import org.geoserver.catalog.StoreInfo;
import org.geoserver.catalog.WMSStoreInfo;
import org.geoserver.web.CatalogIconFactory;
import org.geoserver.web.GeoServerApplication;
import org.geoserver.web.data.workspace.WorkspaceEditPage;
import org.geoserver.web.wicket.ConfirmationAjaxLink;
import org.geoserver.web.wicket.GeoServerDataProvider.Property;
import org.geoserver.web.wicket.GeoServerTablePanel;
import org.geoserver.web.wicket.ParamResourceModel;
import org.geoserver.web.wicket.SimpleAjaxLink;
import org.geoserver.web.wicket.SimpleBookmarkableLink;
/**
* Panel listing the configured StoreInfo object on a table
*
* @author Justin Deoliveira
* @author Gabriel Roldan
* @version $Id$
* @see StorePage
* @see StoreProvider
*/
@SuppressWarnings("serial")
public class StorePanel extends GeoServerTablePanel<StoreInfo> {
private static final long serialVersionUID = 5957961031378924960L;
private ModalWindow popupWindow;
public StorePanel(String id, StoreProvider provider, boolean selectable) {
super(id, provider, selectable);
// the popup window for messages
popupWindow = new ModalWindow("popupWindow");
add(popupWindow);
}
private Catalog getCatalog() {
return GeoServerApplication.get().getCatalog();
}
@Override
protected Component getComponentForProperty(String id, IModel<StoreInfo> itemModel,
Property<StoreInfo> property) {
final CatalogIconFactory icons = CatalogIconFactory.get();
if (property == StoreProvider.DATA_TYPE) {
final StoreInfo storeInfo = (StoreInfo) itemModel.getObject();
PackageResourceReference storeIcon = icons.getStoreIcon(storeInfo);
Fragment f = new Fragment(id, "iconFragment", StorePanel.this);
f.add(new Image("storeIcon", storeIcon));
return f;
} else if (property == WORKSPACE) {
return workspaceLink(id, itemModel);
} else if (property == NAME) {
return storeNameLink(id, itemModel);
} else if (property == ENABLED) {
final StoreInfo storeInfo = (StoreInfo) itemModel.getObject();
PackageResourceReference enabledIcon;
if (storeInfo.isEnabled()) {
enabledIcon = icons.getEnabledIcon();
} else {
enabledIcon = icons.getDisabledIcon();
}
Fragment f = new Fragment(id, "iconFragment", StorePanel.this);
f.add(new Image("storeIcon", enabledIcon));
return f;
}
return null;
}
private Component storeNameLink(String id, final IModel itemModel) {
String wsName = (String) WORKSPACE.getModel(itemModel).getObject();
IModel storeNameModel = NAME.getModel(itemModel);
String storeName = (String) storeNameModel.getObject();
StoreInfo store = getCatalog().getStoreByName(wsName, storeName, StoreInfo.class);
if(store instanceof DataStoreInfo) {
return new SimpleBookmarkableLink(id, DataAccessEditPage.class, storeNameModel,
DataAccessEditPage.STORE_NAME, storeName,
DataAccessEditPage.WS_NAME, wsName);
} else if(store instanceof CoverageStoreInfo){
return new SimpleBookmarkableLink(id, CoverageStoreEditPage.class, storeNameModel,
DataAccessEditPage.STORE_NAME, storeName,
DataAccessEditPage.WS_NAME, wsName);
} else if(store instanceof WMSStoreInfo){
return new SimpleBookmarkableLink(id, WMSStoreEditPage.class, storeNameModel,
DataAccessEditPage.STORE_NAME, storeName,
DataAccessEditPage.WS_NAME, wsName);
} else {
throw new RuntimeException("Don't know what to do with this store " + store);
}
}
private Component workspaceLink(String id, IModel itemModel) {
IModel nameModel = WORKSPACE.getModel(itemModel);
return new SimpleBookmarkableLink(id, WorkspaceEditPage.class, nameModel,
"name", (String) nameModel.getObject());
}
protected Component removeLink(String id, final IModel itemModel) {
StoreInfo info = (StoreInfo) itemModel.getObject();
ResourceModel resRemove = new ResourceModel("removeStore", "Remove");
ParamResourceModel confirmRemove = new ParamResourceModel("confirmRemoveStoreX", this, info
.getName());
SimpleAjaxLink linkPanel = new ConfirmationAjaxLink(id, null, resRemove, confirmRemove) {
public void onClick(AjaxRequestTarget target) {
getCatalog().remove((StoreInfo) itemModel.getObject());
target.add(StorePanel.this);
}
};
return linkPanel;
}
}