/**
* Copyright (C) 2009 eXo Platform SAS.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.gatein.mop.core.api.workspace.content;
import org.gatein.mop.core.api.AbstractPOMTestCase;
import org.gatein.mop.core.support.content.portlet.Preferences;
import org.gatein.mop.core.support.content.portlet.PreferencesBuilder;
import org.gatein.mop.api.workspace.Workspace;
import org.gatein.mop.api.workspace.ObjectType;
import org.gatein.mop.api.workspace.Site;
import org.gatein.mop.api.workspace.ui.UIContainer;
import org.gatein.mop.api.workspace.ui.UIWindow;
import org.gatein.mop.api.content.Customization;
import org.gatein.mop.api.content.CustomizationContext;
import java.util.Arrays;
import java.util.ArrayList;
/**
* @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
* @version $Revision$
*/
public class CustomizationTestCase extends AbstractPOMTestCase
{
/** . */
private final Preferences marseille = new PreferencesBuilder().add("city", "marseille").add("temperature", "celsius").build();
/** . */
private final Preferences paris = new PreferencesBuilder().add("city", "paris").build();
/** . */
private final Preferences parisCelsius = new PreferencesBuilder().add("city", "paris").add("temperature", "celsius").build();
/** . */
private final Preferences parisFarenheit = new PreferencesBuilder().add("city", "paris").add("temperature", "farenheit").build();
public void testVirtualCustomization()
{
Workspace workspace = pomService.getModel().getWorkspace();
Customization<Preferences> customization1 = workspace.getCustomizationContext().customize("marseille", Preferences.CONTENT_TYPE, "WeatherPortlet", marseille);
Customization<Preferences> customization2 = workspace.getCustomizationContext().customize("paris", customization1);
//
customization2.setState(paris);
assertEquals(paris, customization2.getState());
assertEquals(parisCelsius, customization2.getVirtualState());
//
customization2.setState(parisFarenheit);
assertEquals(parisFarenheit, customization2.getState());
assertEquals(parisFarenheit, customization2.getVirtualState());
//
customization1.setState(customization1.getState().setReadOnly("temperature", true));
assertEquals(parisFarenheit, customization2.getState());
assertEquals(parisCelsius, customization2.getVirtualState());
}
public void testCustomizeWorkspace()
{
Workspace workspace = pomService.getModel().getWorkspace();
assertNull(workspace.getCustomizationContext().getCustomization("marseille"));
Customization<Preferences> customization = workspace.getCustomizationContext().customize("marseille", Preferences.CONTENT_TYPE, "WeatherPortlet", marseille);
assertNotNull(customization);
Preferences b = customization.getState();
assertEquals(marseille, b);
assertEquals(0, customization.getContexts().size());
assertEquals("WeatherPortlet", customization.getContentId());
assertEquals(Preferences.CONTENT_TYPE, customization.getType());
assertEquals("marseille", workspace.getCustomizationContext().nameOf(customization));
}
public void testCustomizeWindow()
{
Workspace workspace = pomService.getModel().getWorkspace();
Site portal = workspace.addSite(ObjectType.PORTAL_SITE, "portal");
UIContainer layout = portal.getRootPage().getRootComponent();
UIWindow window = layout.add(ObjectType.WINDOW, "window");
//
Customization<Preferences> customization = window.customize(Preferences.CONTENT_TYPE, "WeatherPortlet", marseille);
assertSame(customization, window.getCustomization());
assertEquals(marseille, customization.getVirtualState());
assertEquals(marseille, customization.getState());
//
customization = (Customization<Preferences>)window.getCustomization();
assertSame(customization, window.getCustomization());
assertEquals(marseille, customization.getVirtualState());
assertEquals(marseille, customization.getState());
}
public void testCustomizeWindowByCloneWithNoState()
{
Workspace workspace = pomService.getModel().getWorkspace();
Site portal = workspace.addSite(ObjectType.PORTAL_SITE, "portal");
UIContainer layout = portal.getRootPage().getRootComponent();
UIWindow window = layout.add(ObjectType.WINDOW, "window");
//
Customization<Preferences> customization = window.customize(Preferences.CONTENT_TYPE, "WeatherPortlet", null);
assertSame(customization, window.getCustomization());
assertNull(customization.getState());
}
public void testCustomizeWindowBySpecialization()
{
Workspace workspace = pomService.getModel().getWorkspace();
Site portal = workspace.addSite(ObjectType.PORTAL_SITE, "portal");
UIContainer layout = portal.getRootPage().getRootComponent();
UIWindow window = layout.add(ObjectType.WINDOW, "window");
//
Customization<Preferences> workspaceCustomization = portal.getCustomizationContext().customize("marseille", Preferences.CONTENT_TYPE, "WeatherPortlet", marseille);
Customization<Preferences> windowCustomization = window.customize(workspaceCustomization);
//
assertNotNull(windowCustomization);
assertEquals(Arrays.<CustomizationContext>asList(window, portal.getCustomizationContext()), new ArrayList<CustomizationContext>(windowCustomization.getContexts()));
assertSame(windowCustomization, window.getCustomization());
assertTrue(((Customization)windowCustomization) instanceof WorkspaceSpecialization);
//
assertPreferences(null, windowCustomization.getState());
assertPreferences(marseille, windowCustomization.getVirtualState());
assertPreferences(marseille, workspaceCustomization.getState());
//
workspaceCustomization.setState(paris);
assertPreferences(paris, windowCustomization.getVirtualState());
assertPreferences(null, windowCustomization.getState());
assertPreferences(paris, workspaceCustomization.getState());
//
windowCustomization.setState(parisFarenheit);
assertPreferences(parisFarenheit, windowCustomization.getVirtualState());
assertPreferences(parisFarenheit, windowCustomization.getState());
assertPreferences(paris, workspaceCustomization.getState());
}
public void testDestroySpecializedCustomization()
{
Workspace workspace = pomService.getModel().getWorkspace();
Site portal = workspace.addSite(ObjectType.PORTAL_SITE, "portal");
UIContainer layout = portal.getRootPage().getRootComponent();
UIWindow window = layout.add(ObjectType.WINDOW, "window");
//
Customization<Preferences> workspaceCustomization = portal.getCustomizationContext().customize("marseille", Preferences.CONTENT_TYPE, "WeatherPortlet", marseille);
Customization<Preferences> windowCustomization = window.customize(workspaceCustomization);
//
workspaceCustomization.destroy();
//
assertEquals(marseille, windowCustomization.getVirtualState());
assertEquals(marseille, windowCustomization.getState());
}
public void testDestroySpecialization()
{
Workspace workspace = pomService.getModel().getWorkspace();
Site portal = workspace.addSite(ObjectType.PORTAL_SITE, "portal");
UIContainer layout = portal.getRootPage().getRootComponent();
UIWindow window = layout.add(ObjectType.WINDOW, "window");
//
Customization<Preferences> workspaceCustomization = portal.getCustomizationContext().customize("marseille", Preferences.CONTENT_TYPE, "WeatherPortlet", marseille);
Customization<Preferences> windowCustomization = window.customize(workspaceCustomization);
//
windowCustomization.destroy();
}
private void assertPreferences(Preferences expectedPrefs, Preferences prefs)
{
assertEquals("Was expecting to have prefs " + prefs + " equals to " + expectedPrefs, expectedPrefs, prefs);
}
}