/* * Copyright 2010 JBoss Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.drools.guvnor.client.admin; import org.drools.guvnor.client.common.GenericCallback; import org.drools.guvnor.client.common.PrettyFormLayout; import org.drools.guvnor.client.messages.Constants; import org.drools.guvnor.client.resources.Images; import org.drools.guvnor.client.rpc.PackageConfigData; import org.drools.guvnor.client.rpc.RepositoryServiceFactory; import org.drools.guvnor.client.rpc.ValidatedResponse; import org.drools.guvnor.client.ruleeditor.MultiViewRow; import org.drools.guvnor.client.rulelist.AssetItemGrid; import org.drools.guvnor.client.rulelist.AssetItemGridDataLoader; import org.drools.guvnor.client.rulelist.EditItemEvent; import org.drools.guvnor.client.util.TabOpener; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.ListBox; import com.google.gwt.user.client.ui.VerticalPanel; import com.gwtext.client.core.EventObject; import com.gwtext.client.widgets.Button; import com.gwtext.client.widgets.Toolbar; import com.gwtext.client.widgets.ToolbarButton; import com.gwtext.client.widgets.event.ButtonListenerAdapter; /** * @author Fernando Meyer */ public class ArchivedAssetManager extends Composite { private static Images images = (Images) GWT.create( Images.class ); private AssetItemGrid grid; private ListBox packages = new ListBox( true ); private Constants constants = GWT.create( Constants.class ); public ArchivedAssetManager() { PrettyFormLayout pf = new PrettyFormLayout(); VerticalPanel header = new VerticalPanel(); header.add( new HTML( constants.ArchivedItems() ) ); pf.addHeader( images.backupLarge(), header ); final TabOpener tabOpener = TabOpener.getInstance(); EditItemEvent edit = new EditItemEvent() { public void open(String key) { tabOpener.openAsset( key ); } public void open(MultiViewRow[] rows) { for ( MultiViewRow row : rows ) { tabOpener.openAsset( row.uuid ); } } }; grid = new AssetItemGrid( edit, AssetItemGrid.ARCHIVED_RULE_LIST_TABLE_ID, new AssetItemGridDataLoader() { public void loadData(int startRow, int numberOfRows, GenericCallback<org.drools.guvnor.client.rpc.TableDataResult> cb) { RepositoryServiceFactory.getService().loadArchivedAssets( startRow, numberOfRows, cb ); } } ); loadPackages(); Toolbar tb = new Toolbar(); final ToolbarButton restorePackage = new ToolbarButton(); restorePackage.addListener( new ButtonListenerAdapter() { public void onClick(Button button, EventObject e) { restorePackage( packages.getValue( packages.getSelectedIndex() ) ); } } ); restorePackage.setText( constants.RestoreSelectedPackage() ); tb.addButton( restorePackage ); final ToolbarButton delPackage = new ToolbarButton(); delPackage.setText( constants.PermanentlyDeletePackage() ); delPackage.addListener( new ButtonListenerAdapter() { public void onClick(Button button, EventObject e) { if ( Window.confirm( constants.AreYouSurePackageDelete() ) ) { deletePackage( packages.getValue( packages.getSelectedIndex() ) ); } } } ); tb.addButton( delPackage ); pf.startSection( constants.ArchivedPackagesList() ); pf.addRow( tb ); pf.addRow( packages ); pf.endSection(); tb = new Toolbar(); final ToolbarButton restoreAsset = new ToolbarButton(); restoreAsset.setText( constants.RestoreSelectedAsset() ); tb.addButton( restoreAsset ); restoreAsset.addListener( new ButtonListenerAdapter() { public void onClick(Button button, EventObject e) { if ( grid.getSelectedRowUUIDs() == null ) { Window.alert( constants.PleaseSelectAnItemToRestore() ); return; } RepositoryServiceFactory.getService().archiveAssets( grid.getSelectedRowUUIDs(), false, new GenericCallback<java.lang.Void>() { public void onSuccess(Void arg0) { Window.alert( constants.ItemRestored() ); grid.refreshGrid(); } } ); }; } ); final ToolbarButton deleteAsset = new ToolbarButton(); deleteAsset.setText( constants.DeleteSelectedAsset() ); tb.addButton( deleteAsset ); deleteAsset.addListener( new ButtonListenerAdapter() { public void onClick(Button button, EventObject e) { if ( grid.getSelectedRowUUIDs() == null ) { Window.alert( constants.PleaseSelectAnItemToPermanentlyDelete() ); return; } if ( !Window.confirm( constants.AreYouSureDeletingAsset() ) ) { return; } RepositoryServiceFactory.getService().removeAssets( grid.getSelectedRowUUIDs(), new GenericCallback<java.lang.Void>() { public void onSuccess(Void arg0) { Window.alert( constants.ItemDeleted() ); grid.refreshGrid(); } } ); } } ); pf.startSection( constants.ArchivedAssets() ); pf.addRow( tb ); pf.addRow( grid ); pf.endSection(); initWidget( pf ); } private void deletePackage(final String uuid) { RepositoryServiceFactory.getService().removePackage( uuid, new GenericCallback<java.lang.Void>() { public void onSuccess(Void data) { Window.alert( constants.PackageDeleted() ); packages.clear(); loadPackages(); } } ); } private void restorePackage(String uuid) { RepositoryServiceFactory.getService().loadPackageConfig( uuid, new GenericCallback<PackageConfigData>() { public void onSuccess(PackageConfigData cf) { cf.archived = false; RepositoryServiceFactory.getService().savePackage( cf, new GenericCallback<ValidatedResponse>() { public void onSuccess(ValidatedResponse data) { Window.alert( constants.PackageRestored() ); packages.clear(); loadPackages(); } } ); } } ); } private ListBox loadPackages() { RepositoryServiceFactory.getService().listArchivedPackages( new GenericCallback<PackageConfigData[]>() { public void onSuccess(PackageConfigData[] configs) { for ( int i = 0; i < configs.length; i++ ) { packages.addItem( configs[i].name, configs[i].uuid ); } if ( configs.length == 0 ) { packages.addItem( constants.noArchivedPackages() ); } } } ); return packages; } }