/* * Copyright 2015 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * * 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.asset.management.client.editors.common; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.TreeMap; import javax.enterprise.event.Observes; import javax.inject.Inject; import org.guvnor.asset.management.client.i18n.Constants; import org.guvnor.asset.management.service.AssetManagementService; import org.guvnor.asset.management.service.RepositoryStructureService; 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.guvnor.structure.repositories.RepositoryEnvironmentUpdatedEvent; import org.jboss.errai.common.client.api.Caller; import org.jboss.errai.common.client.api.RemoteCallback; import org.jboss.errai.security.shared.api.identity.User; import org.uberfire.client.mvp.PlaceManager; import org.uberfire.mvp.PlaceRequest; import org.uberfire.security.authz.AuthorizationManager; public abstract class BaseAssetsMgmtPresenter { protected Constants constants = Constants.INSTANCE; @Inject protected Caller<AssetManagementService> assetManagementServices; @Inject protected Caller<RepositoryService> repositoryServices; @Inject protected Caller<RepositoryStructureService> repositoryStructureServices; @Inject protected User identity; @Inject protected AuthorizationManager authorizationManager; @Inject protected PlaceManager placeManager; protected Map<String, Repository> repositories = new TreeMap<String, Repository>(); protected BaseAssetsMgmtView baseView; protected PlaceRequest place; public void init() { } public void loadRepositories() { repositoryServices.call( new RemoteCallback<List<Repository>>() { @Override public void callback( final List<Repository> repositoriesResults ) { repositories.clear(); baseView.getChooseRepositoryBox().clear(); baseView.getChooseRepositoryBox().addItem( constants.Select_Repository() ); for ( Repository r : repositoriesResults ) { repositories.put( r.getAlias(), r ); } for ( Map.Entry<String, Repository> entry : repositories.entrySet() ) { if ( authorizationManager.authorize( entry.getValue(), identity ) && isManaged( entry.getValue() ) ) { baseView.getChooseRepositoryBox().addItem( entry.getKey(), entry.getValue().getAlias() ); } } } } ).getRepositories(); } public boolean isManaged( Repository value ) { return value != null && value.getEnvironment() != null && Boolean.TRUE.equals( value.getEnvironment().get( "managed" ) ); } public Repository getRepository( String alias ) { return repositories.get( alias ); } public Collection<Repository> getRepositories() { return repositories.values(); } private void onRepositoryAdded( @Observes final NewRepositoryEvent event ) { loadRepositories(); } private void onRepositoryRemovedEvent( @Observes RepositoryRemovedEvent event ) { loadRepositories(); } private void onRepositoryUpdatedEvent( @Observes RepositoryEnvironmentUpdatedEvent event ) { loadRepositories(); } }