/** * Copyright 2015 ArcBees 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 com.arcbees.gaestudio.client.application.visualizer.widget; import java.util.Set; import com.arcbees.gaestudio.client.application.event.DisplayMessageEvent; import com.arcbees.gaestudio.client.application.visualizer.ParsedEntity; import com.arcbees.gaestudio.client.application.visualizer.event.DeleteEntitiesEvent; import com.arcbees.gaestudio.client.application.visualizer.event.DeleteEntityEvent; import com.arcbees.gaestudio.client.application.visualizer.event.EntitiesDeletedEvent; import com.arcbees.gaestudio.client.application.visualizer.event.EntityDeletedEvent; import com.arcbees.gaestudio.client.application.widget.message.Message; import com.arcbees.gaestudio.client.application.widget.message.MessageStyle; import com.arcbees.gaestudio.client.resources.AppConstants; import com.arcbees.gaestudio.client.rest.EntitiesService; import com.arcbees.gaestudio.client.rest.EntityService; import com.arcbees.gaestudio.client.util.AsyncCallbackImpl; import com.arcbees.gaestudio.shared.DeleteEntities; import com.arcbees.gaestudio.shared.dto.entity.EntityDto; import com.arcbees.gaestudio.shared.dto.entity.KeyDto; import com.google.common.base.Function; import com.google.common.collect.FluentIterable; import com.google.inject.Inject; import com.google.web.bindery.event.shared.EventBus; import com.gwtplatform.dispatch.rest.client.RestDispatch; import com.gwtplatform.mvp.client.HasUiHandlers; import com.gwtplatform.mvp.client.PresenterWidget; import com.gwtplatform.mvp.client.View; import static com.arcbees.gaestudio.client.application.visualizer.event.DeleteEntitiesEvent.DeleteEntitiesHandler; import static com.arcbees.gaestudio.client.application.visualizer.widget.EntityDeletionPresenter.DeleteType.BATCH; import static com.arcbees.gaestudio.client.application.visualizer.widget.EntityDeletionPresenter.DeleteType.SINGLE; public class EntityDeletionPresenter extends PresenterWidget<EntityDeletionPresenter.MyView> implements DeleteEntityEvent.DeleteEntityHandler, EntityDeletionUiHandlers, DeleteEntitiesHandler { interface MyView extends View, HasUiHandlers<EntityDeletionUiHandlers> { void displayEntityDeletion(ParsedEntity parsedEntity); void displayEntitiesDeletion(DeleteEntities deleteType, String kind, String namespace, Set<ParsedEntity> entities); void hide(); } enum DeleteType { SINGLE, BATCH } private final AppConstants myConstants; private final EntitiesService entitiesService; private final EntityService entityService; private final RestDispatch restDispatch; private DeleteType lastEvent; private ParsedEntity currentParsedEntity; private DeleteEntitiesEvent deleteEntitiesEvent; @Inject EntityDeletionPresenter( EventBus eventBus, MyView view, AppConstants myConstants, RestDispatch restDispatch, EntitiesService entitiesService, EntityService entityService) { super(eventBus, view); getView().setUiHandlers(this); this.restDispatch = restDispatch; this.entitiesService = entitiesService; this.myConstants = myConstants; this.entityService = entityService; } @Override public void onDeleteEntity(DeleteEntityEvent event) { currentParsedEntity = event.getParsedEntity(); getView().displayEntityDeletion(currentParsedEntity); lastEvent = SINGLE; } @Override public void onDeleteEntities(DeleteEntitiesEvent event) { deleteEntitiesEvent = event; getView().displayEntitiesDeletion(deleteEntitiesEvent.getDeleteEntities(), deleteEntitiesEvent.getKind(), deleteEntitiesEvent.getNamespace(), deleteEntitiesEvent.getEntities()); lastEvent = BATCH; } @Override public void reset() { lastEvent = null; } @Override public void deleteEntity() { if (SINGLE.equals(lastEvent)) { deleteSingleEntity(); } else if (BATCH.equals(lastEvent)) { deleteEntities(); } reset(); } @Override protected void onBind() { super.onBind(); addRegisteredHandler(DeleteEntityEvent.getType(), this); addRegisteredHandler(DeleteEntitiesEvent.getType(), this); } private void deleteEntities() { Set<String> encodedKeys = FluentIterable.from(deleteEntitiesEvent.getEntities()) .transform(new Function<ParsedEntity, String>() { @Override public String apply(ParsedEntity input) { return input.getKey().getEncodedKey(); } }).toSet(); restDispatch.execute(entitiesService.deleteAll(deleteEntitiesEvent.getKind(), deleteEntitiesEvent.getNamespace(), deleteEntitiesEvent.getDeleteEntities(), encodedKeys), new AsyncCallbackImpl<Void>(myConstants.errorEntityDelete()) { @Override public void onSuccess(Void result) { onEntitiesDeletedSuccess(); } }); } private void deleteSingleEntity() { if (currentParsedEntity != null) { final EntityDto entityDto = currentParsedEntity.getEntityDto(); KeyDto key = entityDto.getKey(); restDispatch.execute(entityService.deleteEntity(key.getEncodedKey()), new AsyncCallbackImpl<Void>(myConstants.errorEntityDelete()) { @Override public void onSuccess(Void result) { onEntityDeletedSuccess(entityDto); } }); } } private void onEntityDeletedSuccess(EntityDto entityDTO) { showMessage(myConstants.successEntityDelete(), MessageStyle.SUCCESS); EntityDeletedEvent.fire(this, entityDTO); } private void onEntitiesDeletedSuccess() { showMessage(myConstants.successEntitiesDelete(), MessageStyle.SUCCESS); EntitiesDeletedEvent.fire(this); } private void showMessage(String content, MessageStyle style) { Message message = new Message(content, style); DisplayMessageEvent.fire(this, message); } }