Skip to content

Commit

Permalink
added a "break all contracts" button to the app contracts tab
Browse files Browse the repository at this point in the history
  • Loading branch information
EricWittmann committed Jan 15, 2015
1 parent 7c7fb8f commit 7ad4c09
Show file tree
Hide file tree
Showing 3 changed files with 88 additions and 4 deletions.
Expand Up @@ -483,6 +483,11 @@ public class AppMessages {
@TranslationKey(defaultValue = "Really break contract with service {0}?")
public static final String CONFIRM_BREAK_CONTRACT_MESSAGE = "confirm.break-contract.message";

@TranslationKey(defaultValue = "Confirm Break All Contracts")
public static final String CONFIRM_BREAK_ALL_CONTRACTS_TITLE = "confirm.break-all-contracts.title";
@TranslationKey(defaultValue = "This will break all Service Contracts listed below. Is that really what you want to do?")
public static final String CONFIRM_BREAK_ALL_CONTRACTS_MESSAGE = "confirm.break-all-contracts.message";

@TranslationKey(defaultValue = "Confirm Remove Policy")
public static final String CONFIRM_REMOVE_POLICY_TITLE = "confirm.remove-policy.title";
@TranslationKey(defaultValue = "Really remove policy {0}?")
Expand Down Expand Up @@ -520,6 +525,9 @@ public class AppMessages {
@TranslationKey(defaultValue = "Filter by org or service name...")
public static final String CONSUMER_ORG_FILTER_PLACEHOLDER = "consumer-org.filter.placeholder";

@TranslationKey(defaultValue = "Filter by org or service name...")
public static final String APP_CONTRACTS_FILTER_PLACEHOLDER = "app-contracts.filter.placeholder";

@TranslationKey(defaultValue = "You have chosen to import {0} service(s) through {1} plan(s). Does that sound about right?")
public static final String CONFIRM_IMPORT_SERVICES_1 = "import-services.confirm-msg-1";
@TranslationKey(defaultValue = "You have chosen to import {0} public service(s) through {1} plan(s). Does that sound about right?")
Expand Down
Expand Up @@ -18,25 +18,33 @@
import io.apiman.manager.api.beans.summary.ContractSummaryBean;
import io.apiman.manager.ui.client.local.AppMessages;
import io.apiman.manager.ui.client.local.events.BreakContractEvent;
import io.apiman.manager.ui.client.local.events.ConfirmationEvent;
import io.apiman.manager.ui.client.local.pages.app.AppContractList;
import io.apiman.manager.ui.client.local.services.rest.IRestInvokerCallback;
import io.apiman.manager.ui.client.local.util.MultimapUtil;
import io.apiman.manager.ui.client.local.widgets.ConfirmationDialog;
import io.apiman.manager.ui.client.local.widgets.SearchBox;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.annotation.PostConstruct;
import javax.enterprise.context.Dependent;
import javax.enterprise.inject.Instance;
import javax.inject.Inject;

import org.jboss.errai.ui.nav.client.local.Page;
import org.jboss.errai.ui.shared.api.annotations.DataField;
import org.jboss.errai.ui.shared.api.annotations.EventHandler;
import org.jboss.errai.ui.shared.api.annotations.Templated;
import org.overlord.commons.gwt.client.local.widgets.AsyncActionButton;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.TextBox;


/**
Expand All @@ -51,13 +59,18 @@ public class AppContractsPage extends AbstractAppPage {

private List<ContractSummaryBean> contractBeans;

@Inject
Instance<ConfirmationDialog> confirmDialogFactory;

@Inject @DataField
Anchor toNewContract;

@Inject @DataField
TextBox contractFilter;
SearchBox contractFilter;
@Inject @DataField
AppContractList contracts;
@Inject @DataField
AsyncActionButton breakAllContracts;

/**
* Constructor.
Expand All @@ -76,6 +89,7 @@ public void onValueChange(ValueChangeEvent<String> event) {
filterContracts();
}
});
contractFilter.setPlaceholder(i18n.format(AppMessages.APP_CONTRACTS_FILTER_PLACEHOLDER));
contracts.addBreakContractHandler(new BreakContractEvent.Handler() {
@Override
public void onBreakContract(BreakContractEvent event) {
Expand Down Expand Up @@ -128,6 +142,7 @@ protected void renderPage() {
MultimapUtil.fromMultiple("apporg", orgId, "app", appId, "appv", appVersion)); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
toNewContract.setHref(newContractHref);
contracts.setValue(contractBeans);
breakAllContracts.setEnabled(!contractBeans.isEmpty());
}

/**
Expand All @@ -146,7 +161,7 @@ protected void filterContracts() {
contracts.setFilteredValue(filtered);
}
}

/**
* Returns true if the given contract matches the current filter.
* @param contract
Expand Down Expand Up @@ -180,6 +195,55 @@ public void onError(Throwable error) {
}
});
}

/**
* Called when the user clicks the "Break All" button.
* @param event
*/
@EventHandler("breakAllContracts")
public void onBreakAllContracts(ClickEvent event) {
breakAllContracts.onActionStarted();
ConfirmationDialog dialog = confirmDialogFactory.get();
dialog.setDialogTitle(i18n.format(AppMessages.CONFIRM_BREAK_ALL_CONTRACTS_TITLE));
dialog.setDialogMessage(i18n.format(AppMessages.CONFIRM_BREAK_ALL_CONTRACTS_MESSAGE));
dialog.addConfirmationHandler(new ConfirmationEvent.Handler() {
@Override
public void onConfirmation(ConfirmationEvent event) {
if (event.isConfirmed()) {
doBreakAllContracts();
} else {
breakAllContracts.onActionComplete();
}
}
});
dialog.show();
}

/**
* Break all of the contracts.
*/
protected void doBreakAllContracts() {
final int numContracts = contractBeans.size();
final Set<Long> completed = new HashSet<Long>();
for (final ContractSummaryBean contract : contractBeans) {
rest.deleteContract(org, app, versionBean.getVersion(), contract.getContractId(), new IRestInvokerCallback<Void>() {
@Override
public void onSuccess(Void response) {
completed.add(contract.getContractId());
contractBeans.remove(contract);
filterContracts();
if (completed.size() == numContracts) {
breakAllContracts.setEnabled(false);
breakAllContracts.onActionComplete();
}
}
@Override
public void onError(Throwable error) {
dataPacketError(error);
}
});
}
}

/**
* @see io.apiman.manager.ui.client.local.pages.AbstractPage#getPageTitle()
Expand Down
Expand Up @@ -143,8 +143,20 @@
<!-- The list of contracts (filterable) -->
<div>
<div class="apiman-filters apiman-contracts-filters">
<input data-field="contractFilter" class="form-control input-search" placeholder="Filter by org or service name..." type="text">
<table class="search-box input-search" data-field="contractFilter" data-role="dummy">
<tbody>
<tr>
<td width="99%">
<input data-field="textBox" value="" placeholder="Filter by org or service name..." type="text">
</td>
<td width="1%">
<button data-field="button" class="btn btn-default"><i class="fa fa-fw fa-search"></i></button>
</td>
</tr>
</tbody>
</table>
<a data-permission="appEdit" data-status="Created,Ready" data-field="toNewContract" data-i18n-key="new-contract" href="new-contract.html" class="btn btn-primary pull-right">New Contract</a>
<button data-permission="appEdit" data-status="Created,Ready" data-field="breakAllContracts" data-i18n-key="break-all-contracts" placeholder="Breaking..." data-icon="fa-cog" class="btn btn-default pull-right">Break All</button>
</div>
<div class="clearfix"></div>
<!-- The list of contracts -->
Expand Down

0 comments on commit 7ad4c09

Please sign in to comment.