Skip to content
This repository has been archived by the owner on Feb 9, 2021. It is now read-only.

Commit

Permalink
UF-229: Configurable Workbench: Dynamic Screens are not properly disp…
Browse files Browse the repository at this point in the history
…layed in Editor Screen on LayoutEditor

- Also adds refactoring that introduces new Activity.getIdentifier() method
  • Loading branch information
ederign authored and csadilek committed Sep 29, 2015
1 parent 1ba2126 commit 2d1a5ca
Show file tree
Hide file tree
Showing 71 changed files with 619 additions and 52 deletions.
Expand Up @@ -72,6 +72,11 @@ public void onShutdown() {
nativeEditor.onShutdown();
}

@Override
public String getIdentifier() {
return nativeEditor.getId();
}

private void setupObservablePathCallBacks() {
path.onConcurrentUpdate( new ParameterizedCommand<ObservablePath.OnConcurrentUpdateEvent>() {
@Override
Expand Down
Expand Up @@ -37,6 +37,11 @@ public PlaceRequest getPlace() {
return place;
}

@Override
public String getIdentifier() {
return nativePlugin.getId();
}

@Override
public boolean onMayClose() {
return nativePlugin.onMayClose();
Expand Down
Expand Up @@ -69,6 +69,11 @@ public PlaceRequest getPlace() {
return place;
}

@Override
public String getIdentifier() {
return nativeSplashScreen.getId();
}

public void init() {
if ( !splashFilter.displayNextTime() ) {
return;
Expand Down
Expand Up @@ -33,9 +33,6 @@ public AbstractWorkbenchPerspectiveActivity( final PlaceManager placeManager ) {
@Override
public abstract PerspectiveDefinition getDefaultPerspectiveLayout();

@Override
public abstract String getIdentifier();

@Override
public boolean isDefault() {
return false;
Expand Down
Expand Up @@ -88,9 +88,15 @@ public interface Activity extends RuntimeFeatureResource {

/**
* Returns the PlaceRequest that this Activity is currently tied to.
*
*
* @return the PlaceRequest that this activity was started for, or null if this activity is not in the started
* state.
*/
PlaceRequest getPlace();

/**
* Returns the unique identifier for this perspective. Should match the CDI bean name (the argument to the
* activity's {@code @Named} annotation).
*/
String getIdentifier();
}
@@ -0,0 +1,84 @@
/*
* Copyright 2015 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.uberfire.client.mvp;

import org.jboss.errai.ioc.client.container.IOC;
import org.jboss.errai.ioc.client.container.IOCBeanDef;
import org.jboss.errai.ioc.client.container.SyncBeanManager;

import javax.enterprise.context.ApplicationScoped;
import javax.inject.Named;
import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;


@ApplicationScoped
public class ActivityBeansInfo {

public List<String> getAvailableWorkbenchScreensIds() {
return lookupBeansId( WorkbenchScreenActivity.class );
}

public List<String> getAvailablePerspectivesIds() {
return lookupBeansId( PerspectiveActivity.class );
}

public List<String> getAvailableSplashScreensIds() {
return lookupBeansId( SplashScreenActivity.class );
}

public List<String> getAvailableWorkbenchEditorsIds() {
return lookupBeansId( WorkbenchEditorActivity.class );
}

private List<String> lookupBeansId( Class<?> activityClass ) {
final Collection<? extends IOCBeanDef<?>> screens = getBeanManager().lookupBeans( activityClass );
List<String> result = new ArrayList<String>();
for (final IOCBeanDef<?> beanDef : screens) {
result.add( getId( beanDef ) );
}
Collections.sort( result );
return result;
}

SyncBeanManager getBeanManager() {
return IOC.getBeanManager();
}


private String getId( final IOCBeanDef<?> beanDef ) {
for (final Annotation annotation : beanDef.getQualifiers()) {
if (isNamed( annotation )) {
return ((Named) annotation).value();
}
}
if (hasBeanName( beanDef )) {
return beanDef.getName();
}
return "";
}

boolean isNamed( Annotation annotation ) {
return annotation instanceof Named;
}

private boolean hasBeanName( IOCBeanDef<?> beanDef ) {
return beanDef.getName() != null && !beanDef.getName().isEmpty();
}
}
Expand Up @@ -16,7 +16,6 @@

package org.uberfire.client.mvp;

import org.jboss.errai.ioc.client.container.IOC;
import org.jboss.errai.ioc.client.container.IOCBeanDef;
import org.jboss.errai.ioc.client.container.SyncBeanManager;
import org.jboss.errai.security.shared.api.identity.User;
Expand All @@ -29,8 +28,6 @@
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.context.Dependent;
import javax.inject.Inject;
import javax.inject.Named;
import java.lang.annotation.Annotation;
import java.util.*;

import static java.util.Collections.*;
Expand Down Expand Up @@ -107,30 +104,10 @@ public Set<Activity> getActivities( final PlaceRequest placeRequest ) {
private void resolvePathPlaceRequestIdentifier( PlaceRequest placeRequest, Set<Activity> activities ) {
if ( activities!=null && !activities.isEmpty() ) {
final Activity activity = activities.iterator().next();
resolvePathPlaceRequestIdentifier( placeRequest, activity );
placeRequest.setIdentifier( activity.getIdentifier() );
}
}

private void resolvePathPlaceRequestIdentifier( PlaceRequest placeRequest, Activity activity ) {
Set<Annotation> annotations = lookupActivityAnnotations( activity );
for ( Annotation annotation : annotations ) {
if ( annotation instanceof Named ) {
String resolvedPlaceIdentifier = ( (Named) annotation ).value();
placeRequest.setIdentifier( resolvedPlaceIdentifier );
break;
}
}
}

protected Set<Annotation> lookupActivityAnnotations( Activity activity ) {
IOCBeanDef<? extends Activity> iocBeanDef = IOC.getBeanManager().lookupBean( activity.getClass() );
Set<Annotation> qualifiers = iocBeanDef.getQualifiers();
if ( qualifiers == null ) {
return new HashSet<Annotation>();
}
return qualifiers;
}

@Override
public boolean containsActivity( final PlaceRequest placeRequest ) {
if ( containsCache.containsKey( placeRequest.getIdentifier() ) ) {
Expand Down
Expand Up @@ -33,12 +33,6 @@ public interface PerspectiveActivity extends ContextSensitiveActivity {
*/
PerspectiveDefinition getDefaultPerspectiveLayout();

/**
* Returns the unique identifier for this perspective. Should match the CDI bean name (the argument to the
* activity's {@code @Named} annotation).
*/
String getIdentifier();

/**
* Returns true if this perspective should be displayed automatically when the application starts. Each application
* needs exactly one default perspective.
Expand Down
Expand Up @@ -89,6 +89,11 @@ public void onOpen() {
view.setRequestedPlaceIdentifier( identifier );
}

@Override
public String getIdentifier() {
return "uf.workbench.activity.notfound";
}

public void close() {
placeManager.closePlace( this.place );
}
Expand Down
Expand Up @@ -175,6 +175,11 @@ public IsWidget getWidget() {
public String getTitle() {
return "Testing Popup Activity";
}

@Override
public String getIdentifier() {
return "fake.popup.Activity";
}
}

}
@@ -0,0 +1,151 @@
/*
* Copyright 2015 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.uberfire.client.mvp;

import org.jboss.errai.ioc.client.container.CreationalContext;
import org.jboss.errai.ioc.client.container.IOCBeanDef;
import org.jboss.errai.ioc.client.container.SyncBeanManager;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;

import javax.inject.Named;
import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;

import static org.junit.Assert.*;
import static org.mockito.Matchers.anyObject;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

public class ActivityBeansInfoTest {

private SyncBeanManager syncBeanManager;

private ActivityBeansInfo activityBeansInfo;

@Before
public void setup(){
syncBeanManager = mock( SyncBeanManager.class );
activityBeansInfo = new ActivityBeansInfo(){
@Override
SyncBeanManager getBeanManager() {
return syncBeanManager;
}
};
}

@Test
public void getAvaliableWorkbenchScreensIdsTest(){
when( syncBeanManager.lookupBeans( WorkbenchScreenActivity.class ) )
.thenReturn( generateBeansList() );

assertEquals( 2 , activityBeansInfo.getAvailableWorkbenchScreensIds().size() );
//assert bean order
assertEquals( "A" , activityBeansInfo.getAvailableWorkbenchScreensIds().get( 0 ) );
assertEquals( "Z" , activityBeansInfo.getAvailableWorkbenchScreensIds().get( 1 ) );

}

private Collection<IOCBeanDef<WorkbenchScreenActivity>> generateBeansList() {
Collection<IOCBeanDef<WorkbenchScreenActivity>> beans = new ArrayList<IOCBeanDef<WorkbenchScreenActivity>>( );

beans.add( generateBeanDef( "Z", true ) );
beans.add( generateBeanDef( "A", false ) );

return beans;
}

private IOCBeanDef<WorkbenchScreenActivity> generateBeanDef(String beanName, final boolean hasAnnotations) {
return new IOCBeanDef<WorkbenchScreenActivity>() {
@Override
public Class<WorkbenchScreenActivity> getType() {
return null;
}

@Override
public Class<?> getBeanClass() {
return null;
}

@Override
public Class<? extends Annotation> getScope() {
return null;
}

@Override
public WorkbenchScreenActivity getInstance() {
return null;
}

@Override
public WorkbenchScreenActivity getInstance( CreationalContext context ) {
return null;
}

@Override
public WorkbenchScreenActivity newInstance() {
return null;
}

@Override
public Set<Annotation> getQualifiers() {
final HashSet<Annotation> annotations = new HashSet<Annotation>();
if( hasAnnotations ){
annotations.add( new Named(){

@Override
public Class<? extends Annotation> annotationType() {
return null;
}

@Override
public String value() {
return "Z";
}
} );
}
return annotations;
}

@Override
public boolean matches( Set<Annotation> annotations ) {
return false;
}

@Override
public String getName() {
return "A";
}

@Override
public boolean isConcrete() {
return false;
}

@Override
public boolean isActivated() {
return false;
}
};
}


}

0 comments on commit 2d1a5ca

Please sign in to comment.