Package org.guvnor.organizationalunit.manager.client.editor

Source Code of org.guvnor.organizationalunit.manager.client.editor.OrganizationalUnitManagerPresenterImpl

/*
* Copyright 2012 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.guvnor.organizationalunit.manager.client.editor;

import java.util.ArrayList;
import java.util.Collection;
import javax.annotation.PostConstruct;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.event.Observes;
import javax.inject.Inject;

import com.google.gwt.user.client.Command;
import org.guvnor.organizationalunit.manager.client.editor.popups.AddOrganizationalUnitPopup;
import org.guvnor.organizationalunit.manager.client.editor.popups.EditOrganizationalUnitPopup;
import org.guvnor.organizationalunit.manager.client.resources.i18n.OrganizationalUnitManagerConstants;
import org.guvnor.structure.organizationalunit.OrganizationalUnit;
import org.guvnor.structure.organizationalunit.OrganizationalUnitService;
import org.guvnor.structure.repositories.NewRepositoryEvent;
import org.guvnor.structure.repositories.Repository;
import org.guvnor.structure.repositories.RepositoryRemovedEvent;
import org.guvnor.structure.repositories.RepositoryService;
import org.jboss.errai.common.client.api.Caller;
import org.jboss.errai.common.client.api.RemoteCallback;
import org.kie.uberfire.client.callbacks.HasBusyIndicatorDefaultErrorCallback;
import org.uberfire.client.annotations.WorkbenchPartTitle;
import org.uberfire.client.annotations.WorkbenchPartView;
import org.uberfire.client.annotations.WorkbenchScreen;
import org.uberfire.client.mvp.UberView;
import org.uberfire.lifecycle.OnOpen;
import org.uberfire.lifecycle.OnStartup;

@ApplicationScoped
//The identifier has been preserved from kie-wb-common so existing .niogit System repositories are not broken
@WorkbenchScreen(identifier = "org.kie.workbench.common.screens.organizationalunit.manager.OrganizationalUnitManager")
public class OrganizationalUnitManagerPresenterImpl implements OrganizationalUnitManagerPresenter {

    @Inject
    private OrganizationalUnitManagerView view;

    @Inject
    private Caller<OrganizationalUnitService> organizationalUnitService;

    @Inject
    private Caller<RepositoryService> repositoryService;

    @Inject
    private AddOrganizationalUnitPopup addOrganizationalUnitPopup;

    @Inject
    private EditOrganizationalUnitPopup editOrganizationalUnitPopup;

    private Collection<Repository> allRepositories;

    private Collection<OrganizationalUnit> allOrganizationalUnits;

    @PostConstruct
    public void setup() {
        addOrganizationalUnitPopup.init( this );
        editOrganizationalUnitPopup.init( this );
    }

    @OnStartup
    public void onStartup() {
        view.reset();
        view.showBusyIndicator( OrganizationalUnitManagerConstants.INSTANCE.Wait() );
        repositoryService.call( new RemoteCallback<Collection<Repository>>() {
            @Override
            public void callback( final Collection<Repository> repositories ) {
                OrganizationalUnitManagerPresenterImpl.this.allRepositories = repositories;
                loadOrganizationalUnits();
            }
        }, new HasBusyIndicatorDefaultErrorCallback( view ) ).getRepositories();
    }

    @OnOpen
    public void onOpen() {
        view.reset();
    }

    @WorkbenchPartTitle
    public String getTitle() {
        return OrganizationalUnitManagerConstants.INSTANCE.OrganizationalUnitManagerTitle();
    }

    @WorkbenchPartView
    public UberView<OrganizationalUnitManagerPresenter> getView() {
        return view;
    }

    @Override
    public void loadOrganizationalUnits() {
        view.showBusyIndicator( OrganizationalUnitManagerConstants.INSTANCE.Wait() );
        organizationalUnitService.call( new RemoteCallback<Collection<OrganizationalUnit>>() {
            @Override
            public void callback( final Collection<OrganizationalUnit> organizationalUnits ) {
                OrganizationalUnitManagerPresenterImpl.this.allOrganizationalUnits = organizationalUnits;
                view.setOrganizationalUnits( organizationalUnits );
                view.hideBusyIndicator();
            }
        }, new HasBusyIndicatorDefaultErrorCallback( view ) ).getOrganizationalUnits();
    }

    @Override
    public void organizationalUnitSelected( final OrganizationalUnit organizationalUnit ) {
        //Reload rather than using cached Object as it could have been changed server-side (adding/deleting Repositories)
        view.showBusyIndicator( OrganizationalUnitManagerConstants.INSTANCE.Wait() );
        organizationalUnitService.call( new RemoteCallback<OrganizationalUnit>() {
            @Override
            public void callback( final OrganizationalUnit organizationalUnit ) {
                view.setOrganizationalUnitRepositories( organizationalUnit.getRepositories(),
                                                        getAvailableRepositories() );
                view.hideBusyIndicator();
            }
        }, new HasBusyIndicatorDefaultErrorCallback( view ) ).getOrganizationalUnit( organizationalUnit.getName() );
    }

    private Collection<Repository> getAvailableRepositories() {
        final Collection<Repository> availableRepositories = new ArrayList<Repository>();
        availableRepositories.addAll( allRepositories );
        for ( OrganizationalUnit ou : allOrganizationalUnits ) {
            availableRepositories.removeAll( ou.getRepositories() );
        }
        return availableRepositories;
    }

    @Override
    public void addNewOrganizationalUnit() {
        addOrganizationalUnitPopup.show();
    }

    @Override
    public void checkIfOrganizationalUnitExists( final String organizationalUnitName,
                                                 final Command onSuccessCommand,
                                                 final Command onFailureCommand ) {
        //Check the Organizational Unit doesn't already exist
        organizationalUnitService.call( new RemoteCallback<OrganizationalUnit>() {

            @Override
            public void callback( final OrganizationalUnit organizationalUnit ) {
                if ( organizationalUnit == null ) {
                    onSuccessCommand.execute();
                } else {
                    onFailureCommand.execute();
                }
            }
        } ).getOrganizationalUnit( organizationalUnitName );
    }

    @Override
    public void createNewOrganizationalUnit( final String organizationalUnitName,
                                             final String organizationalUnitOwner ) {
        final Collection<Repository> repositories = new ArrayList<Repository>();
        view.showBusyIndicator( OrganizationalUnitManagerConstants.INSTANCE.Wait() );
        organizationalUnitService.call( new RemoteCallback<OrganizationalUnit>() {

            @Override
            public void callback( final OrganizationalUnit newOrganizationalUnit ) {
                allOrganizationalUnits.add( newOrganizationalUnit );
                view.addOrganizationalUnit( newOrganizationalUnit );
                view.hideBusyIndicator();
            }
        }, new HasBusyIndicatorDefaultErrorCallback( view ) ).createOrganizationalUnit( organizationalUnitName,
                                                                                        organizationalUnitOwner,
                                                                                        repositories );
    }

    @Override
    public void editOrganizationalUnit( final OrganizationalUnit organizationalUnit ) {
        editOrganizationalUnitPopup.setOrganizationalUnit( organizationalUnit );
        editOrganizationalUnitPopup.show();
    }

    @Override
    public void saveOrganizationalUnit( final String organizationalUnitName,
                                        final String organizationalUnitOwner ) {
        view.showBusyIndicator( OrganizationalUnitManagerConstants.INSTANCE.Wait() );
        organizationalUnitService.call( new RemoteCallback<Void>() {

            @Override
            public void callback( final Void response ) {
                loadOrganizationalUnits();
            }
        }, new HasBusyIndicatorDefaultErrorCallback( view ) ).updateOrganizationalUnitOwner( organizationalUnitName,
                                                                                             organizationalUnitOwner );
    }

    @Override
    public void deleteOrganizationalUnit( final OrganizationalUnit organizationalUnit ) {
        view.showBusyIndicator( OrganizationalUnitManagerConstants.INSTANCE.Wait() );
        organizationalUnitService.call( new RemoteCallback<Void>() {
            @Override
            public void callback( final Void v ) {
                allOrganizationalUnits.remove( organizationalUnit );
                view.deleteOrganizationalUnit( organizationalUnit );
                view.hideBusyIndicator();
            }
        }, new HasBusyIndicatorDefaultErrorCallback( view ) ).removeOrganizationalUnit( organizationalUnit.getName() );
    }

    @Override
    public void addOrganizationalUnitRepository( final OrganizationalUnit organizationalUnit,
                                                 final Repository repository ) {
        view.showBusyIndicator( OrganizationalUnitManagerConstants.INSTANCE.Wait() );
        organizationalUnit.getRepositories().add( repository );
        organizationalUnitService.call( new RemoteCallback<Void>() {
            @Override
            public void callback( final Void v ) {
                view.setOrganizationalUnitRepositories( organizationalUnit.getRepositories(),
                                                        getAvailableRepositories() );
                view.hideBusyIndicator();
            }
        }, new HasBusyIndicatorDefaultErrorCallback( view ) ).addRepository( organizationalUnit,
                                                                             repository );
    }

    @Override
    public void removeOrganizationalUnitRepository( final OrganizationalUnit organizationalUnit,
                                                    final Repository repository ) {
        view.showBusyIndicator( OrganizationalUnitManagerConstants.INSTANCE.Wait() );
        organizationalUnit.getRepositories().remove( repository );
        organizationalUnitService.call( new RemoteCallback<Void>() {
            @Override
            public void callback( final Void v ) {
                view.setOrganizationalUnitRepositories( organizationalUnit.getRepositories(),
                                                        getAvailableRepositories() );
                view.hideBusyIndicator();
            }
        }, new HasBusyIndicatorDefaultErrorCallback( view ) ).removeRepository( organizationalUnit,
                                                                                repository );
    }

    public void onRepositoryAddedEvent( @Observes NewRepositoryEvent event ) {
        onStartup();
    }

    public void onRepositoryRemovedEvent( @Observes RepositoryRemovedEvent event ) {
        onStartup();
    }

}
TOP

Related Classes of org.guvnor.organizationalunit.manager.client.editor.OrganizationalUnitManagerPresenterImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.