Example usage for com.google.gwt.user.client Timer schedule

List of usage examples for com.google.gwt.user.client Timer schedule

Introduction

In this page you can find the example usage for com.google.gwt.user.client Timer schedule.

Prototype

public synchronized void schedule(int delayMs) 

Source Link

Document

Schedules a timer to elapse in the future.

Usage

From source file:org.drools.guvnor.client.ruleeditor.MessageWidget.java

License:Apache License

public void showMessage(ImageResource image, String message) {

    label.setVisible(true);/*w w  w.  ja  v  a 2 s.co m*/
    label.setHTML(TEMPLATE.message(message));

    Timer timer = new Timer() {
        public void run() {
            label.setVisible(false);
        }
    };
    timer.schedule(1500);
}

From source file:org.drools.guvnor.client.util.TabOpener.java

License:Apache License

/**
 * Open an asset if it is not already open.
 *///from w ww.j a  v  a2 s  .  c  o m
public void openAsset(final String uuid) {
    if (uuid.contains("<")) {
        return;
    }
    History.newItem("asset=" + uuid); // NON-NLS

    if (!explorerViewCenterPanel.showIfOpen(uuid)) {

        final boolean[] loading = { true };

        Timer t = new Timer() {
            public void run() {
                if (loading[0]) {
                    LoadingPopup.showMessage(constants.LoadingAsset());
                }
            }
        };
        t.schedule(200);

        loadRuleAsset(uuid, loading);
    }
}

From source file:org.drools.guvnor.client.widgets.MessageWidget.java

License:Apache License

public void showMessage(String message, MessageType messageType) {
    lblMessage.setText(message);// ww w . j a  v  a 2 s .  c  o m
    messageContainer.setVisible(true);

    Timer timer = new Timer() {
        public void run() {
            HideMessageAnimation anim = new HideMessageAnimation(messageContainer);
            anim.run(250);
        }
    };
    timer.schedule(1500);
}

From source file:org.ebayopensource.turmeric.policy.adminui.client.presenter.policy.AuthzPolicyCreatePresenter.java

License:Open Source License

@Override
protected final void bindSaveButton() {

    // fired on saved policy
    this.view.addSaveButtonClickHandler(new ClickHandler() {
        public void onClick(final ClickEvent event) {

            final GenericPolicy p = getPolicy(view.getPolicyName().getValue(), "AUTHZ",
                    view.getPolicyDesc().getValue(), resourceAssignments,
                    view.getSubjectContentView().getAssignments(), null);

            /**//from ww w .java2 s. co  m
             * This timer is needed due to GWT has only one thread, so
             * Thread.sleep is not a valid option The purpose of sleeping
             * time is wait until new external subject been created into
             * turmeric db, in order to assign them as internal subjects
             */
            Timer timer = new Timer() {
                public void run() {

                    service.createPolicy(p,
                            new AsyncCallback<org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService.CreatePolicyResponse>() {

                                public void onFailure(Throwable err) {
                                    if (err.getLocalizedMessage().contains("500")) {
                                        view.getResourceContentView()
                                                .error(PolicyAdminUIUtil.messages
                                                        .serverError(PolicyAdminUIUtil.policyAdminConstants
                                                                .genericErrorMessage()));
                                    } else {
                                        view.getResourceContentView().error(PolicyAdminUIUtil.messages
                                                .serverError(err.getLocalizedMessage()));
                                    }
                                }

                                public void onSuccess(
                                        final org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService.CreatePolicyResponse response) {

                                    AuthzPolicyCreatePresenter.this.view.clear();
                                    clearLists();
                                    HistoryToken token = makeToken(PolicyController.PRESENTER_ID,
                                            PolicySummaryPresenter.PRESENTER_ID, null);
                                    History.newItem(token.toString(), true);
                                }
                            });
                    view.getSaveButton().setEnabled(true);
                }

            };
            if (view.getSubjectContentView().getAssignments().size() > 0
                    && "USER".equals(view.getSubjectContentView().getAssignments().get(0).getSubjectType())) {
                view.getSaveButton().setEnabled(false);
                timer.schedule(3000);
            } else {
                timer.schedule(1);
            }

        }
    });

}

From source file:org.ebayopensource.turmeric.policy.adminui.client.presenter.policy.AUTHZPolicyEditPresenter.java

License:Open Source License

@Override
protected final void bindSaveButton() {
    {/*w  w w.  j  a  va 2 s .c  om*/
        // fired on saved policy
        this.view.addSaveButtonClickHandler(new ClickHandler() {
            public void onClick(final ClickEvent event) {
                GWT.log("EDITION MODE:");

                final GenericPolicy p = getPolicy(view.getPolicyName().getValue(), originalPolicyType,
                        view.getPolicyDesc().getValue(), resourceAssignments, subjectAssignments,
                        view.getPolicyEnabled(), Long.valueOf(originalPolicyId), null);

                GWT.log("Updating policy: " + p.getId() + "-" + p.getName());
                /**
                 * This timer is needed due to GWT has only one thread, so
                 * Thread.sleep is not a valid option The purpose of
                 * sleeping time is wait until new external subject been
                 * created into turmeric db, in order to assign them as
                 * internal subjects
                 */
                Timer timer = new Timer() {
                    public void run() {

                        service.updatePolicy(UpdateMode.REPLACE, p, new AsyncCallback<UpdatePolicyResponse>() {

                            public void onFailure(final Throwable err) {
                                if (err.getLocalizedMessage().contains("500")) {
                                    view.getResourceContentView().error(PolicyAdminUIUtil.messages.serverError(
                                            PolicyAdminUIUtil.policyAdminConstants.genericErrorMessage()));
                                } else {
                                    view.getResourceContentView().error(
                                            PolicyAdminUIUtil.messages.serverError(err.getLocalizedMessage()));
                                }

                            }

                            public void onSuccess(final UpdatePolicyResponse response) {
                                GWT.log("Updated policy");
                                AUTHZPolicyEditPresenter.this.view.clear();
                                clearLists();
                                HistoryToken token = makeToken(PolicyController.PRESENTER_ID,
                                        PolicySummaryPresenter.PRESENTER_ID, null);

                                // Prefill the summary search with
                                // the policy we just modified
                                token.addValue(HistoryToken.SRCH_POLICY_TYPE, originalPolicyType);
                                token.addValue(HistoryToken.SRCH_POLICY_NAME, p.getName());
                                History.newItem(token.toString(), true);
                            }
                        });
                        view.getSaveButton().setEnabled(true);
                    }

                };
                if (view.getSubjectContentView().getAssignments().size() > 0 && "USER"
                        .equals(view.getSubjectContentView().getAssignments().get(0).getSubjectType())) {
                    view.getSaveButton().setEnabled(false);
                    timer.schedule(3000);
                } else {
                    timer.schedule(1);
                }

            }
        });
    }
}

From source file:org.ebayopensource.turmeric.policy.adminui.client.presenter.policy.BLPolicyCreatePresenter.java

License:Open Source License

@Override
protected final void bindSaveButton() {

    // fired on saved policy
    this.view.addSaveButtonClickHandler(new ClickHandler() {
        public void onClick(final ClickEvent event) {

            final GenericPolicy p = getPolicy(view.getPolicyName().getValue(), "BLACKLIST",
                    view.getPolicyDesc().getValue(), resourceAssignments, subjectAssignments, null);
            GWT.log("Saving policy: " + p.getName() + " with "
                    + view.getSubjectContentView().getSelectedSubjectAssignments().size());
            /**/*from ww  w.  j  av  a 2s.  c  om*/
             * This timer is needed due to GWT has only one thread, so
             * Thread.sleep is not a valid option The purpose of sleeping
             * time is wait until new external subject been created into
             * turmeric db, in order to assign them as internal subjects
             */
            Timer timer = new Timer() {
                public void run() {

                    service.createPolicy(p,
                            new AsyncCallback<org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService.CreatePolicyResponse>() {

                                public void onFailure(final Throwable err) {
                                    if (err.getLocalizedMessage().contains("500")) {
                                        view.getResourceContentView()
                                                .error(PolicyAdminUIUtil.messages
                                                        .serverError(PolicyAdminUIUtil.policyAdminConstants
                                                                .genericErrorMessage()));
                                    } else {
                                        view.getResourceContentView().error(PolicyAdminUIUtil.messages
                                                .serverError(err.getLocalizedMessage()));
                                    }
                                }

                                public void onSuccess(
                                        final org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService.CreatePolicyResponse response) {
                                    GWT.log("Created policy " + response.getPolicyId());
                                    BLPolicyCreatePresenter.this.view.clear();
                                    clearLists();

                                    HistoryToken token = makeToken(PolicyController.PRESENTER_ID,
                                            PolicySummaryPresenter.PRESENTER_ID, null);
                                    History.newItem(token.toString(), true);
                                }
                            });

                    view.getSaveButton().setEnabled(true);
                }

            };
            if (view.getSubjectContentView().getAssignments().size() > 0
                    && "USER".equals(view.getSubjectContentView().getAssignments().get(0).getSubjectType())) {
                view.getSaveButton().setEnabled(false);
                timer.schedule(3000);
            } else {
                timer.schedule(1);
            }

        }
    });

}

From source file:org.ebayopensource.turmeric.policy.adminui.client.presenter.policy.BLPolicyEditPresenter.java

License:Open Source License

@Override
protected final void bindSaveButton() {

    // fired on saved policy
    this.view.addSaveButtonClickHandler(new ClickHandler() {
        public void onClick(final ClickEvent event) {
            GWT.log("EDITION MODE:");

            final GenericPolicy p = getPolicy(view.getPolicyName().getValue(), originalPolicyType,
                    view.getPolicyDesc().getValue(), resourceAssignments, subjectAssignments,
                    view.getPolicyEnabled(), Long.valueOf(originalPolicyId), null);

            GWT.log("Updating policy: " + p.getId() + "-" + p.getName());
            /**/*  w  ww. ja  va  2  s  .  c o m*/
             * This timer is needed due to GWT has only one thread, so
             * Thread.sleep is not a valid option The purpose of sleeping
             * time is wait until new external subject been created into
             * turmeric db, in order to assign them as internal subjects
             */
            Timer timer = new Timer() {
                public void run() {
                    service.updatePolicy(UpdateMode.REPLACE, p, new AsyncCallback<UpdatePolicyResponse>() {

                        public void onFailure(final Throwable err) {
                            if (err.getLocalizedMessage().contains("500")) {
                                view.getResourceContentView().error(PolicyAdminUIUtil.messages.serverError(
                                        PolicyAdminUIUtil.policyAdminConstants.genericErrorMessage()));
                            } else {
                                view.getResourceContentView().error(
                                        PolicyAdminUIUtil.messages.serverError(err.getLocalizedMessage()));
                            }
                        }

                        public void onSuccess(final UpdatePolicyResponse response) {
                            GWT.log("Updated policy");
                            BLPolicyEditPresenter.this.view.clear();
                            clearLists();

                            HistoryToken token = makeToken(PolicyController.PRESENTER_ID,
                                    PolicySummaryPresenter.PRESENTER_ID, null);

                            // Prefill the summary search with
                            // the policy we just modified
                            token.addValue(HistoryToken.SRCH_POLICY_TYPE, originalPolicyType);
                            token.addValue(HistoryToken.SRCH_POLICY_NAME, p.getName());
                            History.newItem(token.toString(), true);
                        }
                    });
                    view.getSaveButton().setEnabled(true);
                }

            };
            if (view.getSubjectContentView().getAssignments().size() > 0
                    && "USER".equals(view.getSubjectContentView().getAssignments().get(0).getSubjectType())) {
                view.getSaveButton().setEnabled(false);
                timer.schedule(3000);
            } else {
                timer.schedule(1);
            }
        }
    });

}

From source file:org.ebayopensource.turmeric.policy.adminui.client.presenter.policy.RLPolicyCreatePresenter.java

License:Open Source License

@Override
protected void bindSaveButton() {
    // fired on saved policy
    this.view.addSaveButtonClickHandler(new ClickHandler() {
        public void onClick(ClickEvent event) {

            String ruleName = view.getPolicyName().getValue();

            RuleEffectType ruleEffectType = RuleEffectType.valueOf(view.getExtraFieldValue(6));
            Integer priority = view.getExtraFieldValue(5) != null ? Integer.valueOf(view.getExtraFieldValue(5))
                    : null;/*from  ww w .j a  va2 s  .  c o  m*/
            Long rolloverPeriod = Long.valueOf(view.getExtraFieldValue(4));
            Long effectDuration = !view.getExtraFieldValue(3).isEmpty()
                    ? Long.valueOf(view.getExtraFieldValue(3))
                    : 0;
            Long conditionDuration = 0L;
            String value = view.getExtraFieldValue(7);

            RuleImpl rule = null;

            if (value != null && !value.isEmpty()) {
                PrimitiveValueImpl primitiveValueImpl = null;
                ExpressionImpl exp = null;

                primitiveValueImpl = new PrimitiveValueImpl();
                primitiveValueImpl.setValue(value);
                primitiveValueImpl.setType(SupportedPrimitive.STRING);
                exp = new ExpressionImpl();
                exp.setPrimitiveValue(primitiveValueImpl);
                Condition condition = new ConditionImpl(exp);
                List<RuleAttribute> attributeList = new ArrayList<RuleAttribute>();

                RuleAttributeImpl raMails = new RuleAttributeImpl(view.getExtraFieldValue(1));
                attributeList.add(raMails);
                RuleAttributeImpl raActive = new RuleAttributeImpl(
                        RuleAttribute.NotifyActiveValue.valueOf(view.getExtraFieldValue(2).toUpperCase()));
                attributeList.add(raActive);

                rule = new RuleImpl(ruleName, null, ruleEffectType, priority, rolloverPeriod, effectDuration,
                        conditionDuration, condition, attributeList);
                rules.add(rule);

            }

            final GenericPolicy p = getPolicy(view.getPolicyName().getValue(), "RL",
                    view.getPolicyDesc().getValue(), resourceAssignments,
                    view.getSubjectContentView().getAssignments(), rules);

            /**
             * This timer is needed due to GWT has only one thread, so
             * Thread.sleep is not a valid option The purpose of sleeping
             * time is wait until new external subject been created into
             * turmeric db, in order to assign them as internal subjects
             */
            Timer timer = new Timer() {
                public void run() {
                    service.createPolicy(p,
                            new AsyncCallback<org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService.CreatePolicyResponse>() {

                                public void onFailure(Throwable arg) {
                                    if (arg.getLocalizedMessage().contains("500")) {
                                        view.error(PolicyAdminUIUtil.messages.serverError(
                                                PolicyAdminUIUtil.policyAdminConstants.genericErrorMessage()));
                                    } else {
                                        view.error(PolicyAdminUIUtil.messages
                                                .serverError(arg.getLocalizedMessage()));
                                    }
                                }

                                public void onSuccess(
                                        org.ebayopensource.turmeric.policy.adminui.client.model.policy.PolicyQueryService.CreatePolicyResponse response) {

                                    RLPolicyCreatePresenter.this.view.clear();
                                    clearLists();
                                    HistoryToken token = makeToken(PolicyController.PRESENTER_ID,
                                            PolicySummaryPresenter.PRESENTER_ID, null);
                                    History.newItem(token.toString(), true);
                                }
                            });

                    view.getSaveButton().setEnabled(true);
                }

            };
            if (view.getSubjectContentView().getAssignments().size() > 0
                    && "USER".equals(view.getSubjectContentView().getAssignments().get(0).getSubjectType())) {
                view.getSaveButton().setEnabled(false);
                timer.schedule(3000);
            } else {
                timer.schedule(1);
            }
        }

    });
}

From source file:org.ebayopensource.turmeric.policy.adminui.client.presenter.policy.RLPolicyEditPresenter.java

License:Open Source License

@Override
protected void bindSaveButton() {
    {/*from   w  ww  .  jav a2s  . c o  m*/
        // fired on saved policy
        this.view.addSaveButtonClickHandler(new ClickHandler() {
            public void onClick(ClickEvent event) {
                GWT.log("EDITION MODE:");
                rules.clear();
                String ruleName = view.getPolicyName().getValue();

                RuleEffectType ruleEffectType = RuleEffectType.valueOf(view.getExtraFieldValue(6));
                Integer priority = view.getExtraFieldValue(5) != null
                        ? Integer.valueOf(view.getExtraFieldValue(5))
                        : null;
                Long rolloverPeriod = Long.valueOf(view.getExtraFieldValue(4));
                Long effectDuration = (view.getExtraFieldValue(3) == null ? 0L
                        : Long.valueOf(view.getExtraFieldValue(3)));
                Long conditionDuration = 0L;
                String value = view.getExtraFieldValue(7);

                RuleImpl rule = null;

                if (value != null && !value.isEmpty()) {
                    PrimitiveValueImpl primitiveValueImpl = null;
                    ExpressionImpl exp = null;

                    primitiveValueImpl = new PrimitiveValueImpl();
                    primitiveValueImpl.setValue(value);
                    primitiveValueImpl.setType(SupportedPrimitive.STRING);
                    exp = new ExpressionImpl();
                    exp.setPrimitiveValue(primitiveValueImpl);
                    Condition condition = new ConditionImpl(exp);
                    List<RuleAttribute> attributeList = new ArrayList<RuleAttribute>();

                    RuleAttributeImpl raMails = new RuleAttributeImpl(view.getExtraFieldValue(1));
                    attributeList.add(raMails);
                    RuleAttributeImpl raActive = new RuleAttributeImpl(
                            RuleAttribute.NotifyActiveValue.valueOf(view.getExtraFieldValue(2).toUpperCase()));
                    attributeList.add(raActive);

                    rule = new RuleImpl(ruleName, null, ruleEffectType, priority, rolloverPeriod,
                            effectDuration, conditionDuration, condition, attributeList);
                    rules.add(rule);
                }

                final GenericPolicy p = getPolicy(view.getPolicyName().getValue(), originalPolicyType,
                        view.getPolicyDesc().getValue(), resourceAssignments, subjectAssignments,
                        view.getPolicyEnabled(), Long.valueOf(originalPolicyId), rules);

                GWT.log("Updating policy: " + p.getId() + "-" + p.getName());
                /**
                 * This timer is needed due to GWT has only one thread, so
                 * Thread.sleep is not a valid option The purpose of
                 * sleeping time is wait until new external subject been
                 * created into turmeric db, in order to assign them as
                 * internal subjects
                 */
                Timer timer = new Timer() {
                    public void run() {
                        service.updatePolicy(UpdateMode.REPLACE, p, new AsyncCallback<UpdatePolicyResponse>() {

                            public void onFailure(Throwable arg) {
                                if (arg.getLocalizedMessage().contains("500")) {
                                    view.error(PolicyAdminUIUtil.messages.serverError(
                                            PolicyAdminUIUtil.policyAdminConstants.genericErrorMessage()));
                                } else {
                                    view.error(
                                            PolicyAdminUIUtil.messages.serverError(arg.getLocalizedMessage()));
                                }
                            }

                            public void onSuccess(UpdatePolicyResponse response) {
                                GWT.log("Updated policy");
                                RLPolicyEditPresenter.this.view.clear();
                                clearLists();
                                HistoryToken token = makeToken(PolicyController.PRESENTER_ID,
                                        PolicySummaryPresenter.PRESENTER_ID, null);

                                // Prefill the summary search with
                                // the policy we just modified
                                token.addValue(HistoryToken.SRCH_POLICY_TYPE, originalPolicyType);
                                token.addValue(HistoryToken.SRCH_POLICY_NAME, p.getName());
                                History.newItem(token.toString(), true);
                            }
                        });

                        view.getSaveButton().setEnabled(true);
                    }

                };
                if (view.getSubjectContentView().getAssignments().size() > 0 && "USER"
                        .equals(view.getSubjectContentView().getAssignments().get(0).getSubjectType())) {
                    view.getSaveButton().setEnabled(false);
                    timer.schedule(3000);
                } else {
                    timer.schedule(1);
                }
            }
        });

    }
}

From source file:org.ebayopensource.turmeric.policy.adminui.client.presenter.policy.SubjectGroupCreatePresenter.java

License:Open Source License

/**
 * Bind.//from  w  ww .  j  av a2 s.c o m
 */
public void bind() {
    this.view.getSearchButton().addClickHandler(new ClickHandler() {
        public void onClick(ClickEvent event) {
            // a search term has been entered
            SubjectGroupCreatePresenter.this.view.getSearchTerm();
            // get the Subject Type
            SubjectGroupCreatePresenter.this.view.getSubjectType();

            // do a lookup of all the matching Subjects
            service = (PolicyQueryService) serviceMap.get(SupportedService.POLICY_QUERY_SERVICE);
            SubjectKey key = new SubjectKey();
            final String searchTerm = SubjectGroupCreatePresenter.this.view.getSearchTerm();
            if (searchTerm != null && !searchTerm.trim().equals("")) {
                key.setName(searchTerm);
            }
            key.setType(SubjectGroupCreatePresenter.this.view.getSubjectType());

            final SubjectQuery query = new SubjectQuery();
            query.setSubjectKeys(Collections.singletonList(key));

            if ("USER".equals(key.getType())) {
                service.findExternalSubjects(query, new AsyncCallback<FindExternalSubjectsResponse>() {

                    public void onFailure(Throwable arg) {
                        if (arg.getLocalizedMessage().contains("500")) {
                            view.error(PolicyAdminUIUtil.messages
                                    .serverError(PolicyAdminUIUtil.policyAdminConstants.genericErrorMessage()));
                        } else {
                            view.error(PolicyAdminUIUtil.messages.serverError(arg.getLocalizedMessage()));
                        }
                    }

                    public void onSuccess(FindExternalSubjectsResponse response) {
                        List<Subject> subjects = response.getSubjects();
                        List<String> names = new ArrayList<String>();
                        if (subjects != null && subjects.size() > 0) {
                            for (Subject s : subjects)
                                names.add(s.getName());
                        } else {
                            view.info(PolicyAdminUIUtil.policyAdminConstants.noItemFoundMessage());
                        }
                        view.setAvailableSubjects(names);

                    }

                });

            } else {
                service.findSubjects(query, new AsyncCallback<FindSubjectsResponse>() {

                    @Override
                    public void onFailure(Throwable arg) {
                        if (arg.getLocalizedMessage().contains("500")) {
                            view.error(PolicyAdminUIUtil.messages
                                    .serverError(PolicyAdminUIUtil.policyAdminConstants.genericErrorMessage()));
                        } else {
                            view.error(PolicyAdminUIUtil.messages.serverError(arg.getLocalizedMessage()));
                        }
                    }

                    @Override
                    public void onSuccess(FindSubjectsResponse response) {
                        List<Subject> subjects = response.getSubjects();
                        List<String> names = new ArrayList<String>();
                        if (subjects != null && subjects.size() > 0) {
                            for (Subject s : subjects) {
                                names.add(s.getName());
                            }
                        } else {
                            final String newSubjectName = query.getSubjectKeys().get(0).getName();
                            final String newSubjectType = query.getSubjectKeys().get(0).getType();
                            if (newSubjectName != null && !newSubjectName.endsWith("%")) { //create a new one
                                if (Window.confirm(
                                        PolicyAdminUIUtil.policyAdminConstants.createInternalSubjects())) {
                                    createInternalSubject(newSubjectName, newSubjectType);
                                    names.add(newSubjectName);
                                }
                            } else { // not found and do not create it
                                view.info(PolicyAdminUIUtil.policyAdminConstants.noItemFoundMessage());
                            }
                        }

                        view.setAvailableSubjects(names);
                    }

                });
            }
        }
    });

    this.view.getCreateButton().addClickHandler(new ClickHandler() {
        public void onClick(ClickEvent event) {
            // Verify that the group has a name, and at least one subject
            String name = SubjectGroupCreatePresenter.this.view.getName();
            if (name == null || name.length() == 0) {
                SubjectGroupCreatePresenter.this.view
                        .error(PolicyAdminUIUtil.policyAdminMessages.nameFieldMessage());
                return;
            }

            String description = SubjectGroupCreatePresenter.this.view.getDescription();

            List<String> subjectNames = SubjectGroupCreatePresenter.this.view.getSelectedSubjects();
            if (subjectNames == null || subjectNames.isEmpty()) {
                SubjectGroupCreatePresenter.this.view
                        .error(PolicyAdminUIUtil.policyAdminMessages.minimumSubjectsMessage());
                return;
            }

            if ("USER".equals(view.getSubjectType())) {
                // external subjects todays are only USER types
                List<Subject> subjects = new ArrayList<Subject>();
                for (String sbName : subjectNames) {
                    SubjectImpl subject = new SubjectImpl();
                    subject.setType("USER");
                    subject.setName(sbName);
                    subjects.add(subject);
                }
                createExternalAsInternalSubject(subjects);
            }

            // user wants to create the Subject Group
            // 1. send the new Subject Group to the server
            // 2. when server acknowledges creation, use the history
            // mechanism to move back to the Subject Group Summary
            service = (PolicyQueryService) serviceMap.get(SupportedService.POLICY_QUERY_SERVICE);
            final SubjectGroupImpl group = new SubjectGroupImpl();
            group.setName(name);
            group.setDescription(description);

            group.setType(SubjectGroupCreatePresenter.this.view.getSubjectType());
            group.setSubjects(subjectNames);
            group.setGroupCalculator(
                    SubjectGroupCreatePresenter.this.view.getSelectedSubjectGroupCalculatorName());

            /**
             * This timer is needed due to GWT has only one thread, so
             * Thread.sleep is not a valid option The purpose of sleeping
             * time is wait until new external subject been created into
             * turmeric db, in order to assign them as internal subjects
             */
            Timer timer = new Timer() {
                public void run() {

                    service.createSubjectGroups(Collections.singletonList((SubjectGroup) group),
                            new AsyncCallback<CreateSubjectGroupsResponse>() {

                                @Override
                                public void onFailure(Throwable arg) {
                                    if (arg.getLocalizedMessage().contains("500")) {
                                        view.error(PolicyAdminUIUtil.messages.serverError(
                                                PolicyAdminUIUtil.policyAdminConstants.genericErrorMessage()));
                                    } else {
                                        view.error(PolicyAdminUIUtil.messages
                                                .serverError(arg.getLocalizedMessage()));
                                    }
                                }

                                @Override
                                public void onSuccess(CreateSubjectGroupsResponse arg0) {
                                    Map<String, String> prefill = new HashMap<String, String>();
                                    prefill.put(HistoryToken.SRCH_SUBJECT_GROUP_TYPE,
                                            SubjectGroupCreatePresenter.this.view.getSubjectType());
                                    prefill.put(HistoryToken.SRCH_SUBJECT_GROUP_NAME,
                                            SubjectGroupCreatePresenter.this.view.getName());
                                    HistoryToken token = makeToken(PolicyController.PRESENTER_ID,
                                            SubjectGroupSummaryPresenter.PRESENTER_ID, prefill);

                                    History.newItem(token.toString(), true);
                                }

                            });

                    view.getCreateButton().setEnabled(true);

                }

            };
            if ("USER".equals(view.getSubjectType())) {
                view.getCreateButton().setEnabled(false);
                timer.schedule(3000);
            } else {
                timer.schedule(1);
            }
        }
    });

    this.view.getCancelButton().addClickHandler(new ClickHandler() {
        public void onClick(ClickEvent event) {
            // Just go back to the summary
            HistoryToken token = makeToken(PolicyController.PRESENTER_ID,
                    SubjectGroupSummaryPresenter.PRESENTER_ID, null);
            History.newItem(token.toString(), true);
        }
    });
}