![JAR search and dependency download from the Maven repository](/logo.png)
com.greenpepper.confluence.actions.server.DemoSpaceAction Maven / Gradle / Ivy
/**
* Copyright (c) 2008 Pyxis Technologies inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; 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.
*
* @author oaouattara
* @version $Id: $Id
*/
package com.greenpepper.confluence.actions.server;
import java.io.FileNotFoundException;
import java.net.URL;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.ResourceBundle;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.atlassian.confluence.core.ConfluenceEntityObject;
import com.atlassian.confluence.importexport.DefaultImportContext;
import com.atlassian.confluence.importexport.ImportExportException;
import com.atlassian.confluence.importexport.ImportExportManager;
import com.atlassian.confluence.importexport.ImportedObjectPostProcessor;
import com.atlassian.confluence.pages.Page;
import com.atlassian.confluence.spaces.Space;
import com.atlassian.confluence.velocity.htmlsafe.HtmlSafe;
import com.atlassian.spring.container.ContainerManager;
import com.atlassian.user.User;
import com.greenpepper.confluence.velocity.ConfluenceGreenPepper;
import com.greenpepper.server.GreenPepperServerException;
import com.greenpepper.server.domain.EnvironmentType;
import com.greenpepper.server.domain.Project;
import com.greenpepper.server.domain.Repository;
import com.greenpepper.server.domain.RepositoryType;
import com.greenpepper.server.domain.Runner;
import com.greenpepper.server.domain.Specification;
import com.greenpepper.server.domain.SystemUnderTest;
import com.greenpepper.server.domain.component.ContentType;
import com.greenpepper.server.rpc.RpcServerService;
import com.greenpepper.util.I18nUtil;
import com.greenpepper.util.StringUtil;
public class DemoSpaceAction
extends GreenPepperServerAction
{
private static final long serialVersionUID = 6646642827806562030L;
private static final String PHONEBOOK_SUD_CLASS = "com.greenpepper.confluence.demo.phonebook.PhoneBookSystemUnderDevelopment";
/**
* Logger for this class
*/
private static final Logger LOGGER = LoggerFactory.getLogger(DemoSpaceAction.class);
private static final String DEMO_NAME = "GreenPepper Demo";
private static final String DEMO_SUT_NAME = "Demo";
private static final String DEMO_SPACE_KEY = "GREENPEPPERDEMO";
private static final String PHONEBOOK_SUT_NAME = DEMO_SUT_NAME + " - PhoneBook";
private static final String RESOURCE_BUNDLE = InstallationAction.class.getName();
private final ThreadLocal threadLocale = new ThreadLocal();
private ResourceBundle resourceBundle;
private ImportExportManager importExportManager;
private String username;
private String pwd;
/**
* Getter for the field pwd
.
*
* @return a {@link java.lang.String} object.
*/
public String getPwd()
{
return pwd;
}
/**
* Setter for the field pwd
.
*
* @param pwd a {@link java.lang.String} object.
*/
public void setPwd(String pwd)
{
this.pwd = StringUtil.toNullIfEmpty(pwd.trim());
}
/**
* Getter for the field username
.
*
* @return a {@link java.lang.String} object.
*/
public String getUsername()
{
return username;
}
/**
* Setter for the field username
.
*
* @param username a {@link java.lang.String} object.
*/
public void setUsername(String username)
{
this.username = StringUtil.toNullIfEmpty(username.trim());
}
/**
* doGetDemo.
*
* @return a {@link java.lang.String} object.
*/
public String doGetDemo()
{
if (!gpUtil.isServerReady())
{
LOGGER.error("Server is not correctly configured.");
addActionError(ConfluenceGreenPepper.SERVER_NOCONFIGURATION);
return SUCCESS;
}
return SUCCESS;
}
/**
* isDemoSpaceExist.
*
* @return a boolean.
*/
public boolean isDemoSpaceExist()
{
try
{
return getDemoSpace() != null;
}
catch (Exception ex)
{
return false;
}
}
/**
* doCreateDemoSpace.
*
* @return a {@link java.lang.String} object.
*/
public String doCreateDemoSpace()
{
LOGGER.info("creating DEMO Space");
try
{
if (getUsername() != null)
{
gpUtil.verifyCredentials(getUsername(), getPwd());
}
doImportDemoSite();
Space demoSpace = getDemoSpace();
if (demoSpace == null)
{
throw new GreenPepperServerException("greenpepper.demo.importfail", "Importing the demo site fail!");
}
Repository demoRepository = doRegisterSpace(demoSpace);
doAddDemoSUT(demoRepository);
doAddPhoneBookSUT(demoRepository);
doGreenPepperizedPage(demoSpace, demoRepository);
doAddRemoteUserToGreenPepperUserGroup();
}
catch (GreenPepperServerException ex)
{
LOGGER.error("Error creating DEMO Space", ex);
addActionError(ex.getId());
doRemoveDemoSpace();
}
catch (Exception ex)
{
LOGGER.error("Error creating DEMO Space", ex);
addActionError(ex.getMessage());
doRemoveDemoSpace();
}
return SUCCESS;
}
private Repository doRegisterSpace(Space demoSpace)
throws GreenPepperServerException
{
LOGGER.info("Registering DEMO Space");
Repository demoRepository = getDemoRepository();
if (demoRepository != null) return demoRepository;
Project demoProject = getDemoProject();
String uid = gpUtil.getSettingsManager().getGlobalSettings().getSiteTitle() + "-" + demoSpace.getKey();
demoRepository = Repository.newInstance(uid);
demoRepository.setProject(demoProject);
demoRepository.setType(RepositoryType.newInstance("CONFLUENCE"));
demoRepository.setName(DEMO_NAME);
demoRepository.setContentType(ContentType.TEST);
demoRepository.setBaseUrl(gpUtil.getBaseUrl());
demoRepository.setUsername(getUsername());
demoRepository.setPassword(getPwd());
demoRepository.setBaseRepositoryUrl(getDemoSpaceUrl());
String baseTestUrl = String.format("%s/rpc/xmlrpc?handler=%s#%s", gpUtil.getBaseUrl(),
RpcServerService.SERVICE_HANDLER, demoSpace.getKey());
demoRepository.setBaseTestUrl(baseTestUrl);
return getService().registerRepository(demoRepository);
}
private void doAddDemoSUT(Repository demoRepository)
throws GreenPepperServerException
{
SystemUnderTest demoSut = getSUT(demoRepository, DEMO_SUT_NAME);
if (demoSut == null)
{
demoSut = SystemUnderTest.newInstance(DEMO_SUT_NAME);
demoSut.setRunner(getJavaRunner());
demoSut.setProject(getDemoProject());
gpUtil.getGPServerService().createSystemUnderTest(demoSut, demoRepository);
}
}
private void doAddPhoneBookSUT(Repository demoRepository)
throws GreenPepperServerException
{
SystemUnderTest phoneBookSut = getSUT(demoRepository, PHONEBOOK_SUT_NAME);
if (phoneBookSut == null)
{
phoneBookSut = SystemUnderTest.newInstance(PHONEBOOK_SUT_NAME);
phoneBookSut.setFixtureFactory(PHONEBOOK_SUD_CLASS);
phoneBookSut.setRunner(getJavaRunner());
phoneBookSut.setProject(getDemoProject());
gpUtil.getGPServerService().createSystemUnderTest(phoneBookSut, demoRepository);
}
}
private void doGreenPepperizedPage(Space demoSpace, Repository demoRepository)
throws GreenPepperServerException
{
List demoPages = gpUtil.getPageManager().getPages(demoSpace, true);
for (Page demoPage : demoPages)
{
if (demoSpace.getHomePage().getId() != demoPage.getId()
&& !demoPage.getTitle().endsWith(".java"))
{
doGreenPepperizedPage(demoRepository, demoPage);
}
}
}
private void doGreenPepperizedPage(Repository demoRepository, Page page)
throws GreenPepperServerException
{
Specification spec = Specification.newInstance(page.getTitle());
spec.setRepository(demoRepository);
spec = gpUtil.getGPServerService().createSpecification(spec);
if (page.getTitle().equals("PhoneBook"))
{
SystemUnderTest phoneBookSut = getSUT(demoRepository, PHONEBOOK_SUT_NAME);
gpUtil.getGPServerService().addSpecificationSystemUnderTest(phoneBookSut, spec);
SystemUnderTest demoSut = getSUT(demoRepository, DEMO_SUT_NAME);
gpUtil.getGPServerService().removeSpecificationSystemUnderTest(demoSut, spec);
}
}
private void doAddRemoteUserToGreenPepperUserGroup()
{
final User remoteUser = this.getRemoteUser();
if (!gpUtil.getGreenPepperUserGroup().hasMembership(remoteUser))
{
gpUtil.getGreenPepperUserGroup().addMembership(remoteUser);
}
}
private Space getDemoSpace()
{
return gpUtil.getSpaceManager().getSpace(DEMO_SPACE_KEY);
}
private SystemUnderTest getSUT(Repository demoRepository, String name)
throws GreenPepperServerException
{
List suts = gpUtil.getGPServerService().getSystemUnderTestsOfAssociatedProject(demoRepository.getUid());
for (SystemUnderTest sut : suts)
{
if (sut.getName().equals(name))
{
return sut;
}
}
return null;
}
private Repository getDemoRepository()
throws GreenPepperServerException
{
List repositories = gpUtil.getGPServerService().getAllSpecificationRepositories();
for (Repository repository : repositories)
{
if (repository.getName().equals(DEMO_NAME))
{
return repository;
}
}
return null;
}
private Project getDemoProject()
throws GreenPepperServerException
{
List projects = gpUtil.getGPServerService().getAllProjects();
for (Project project : projects)
{
if (project.getName().equals(DEMO_NAME))
{
return project;
}
}
return Project.newInstance(DEMO_NAME);
}
private Runner getJavaRunner()
throws GreenPepperServerException
{
List runners = gpUtil.getGPServerService().getAllRunners();
for (Runner runner : runners)
{
String runnerName = runner.getName();
if (runnerName.startsWith("GPCore JAVA v.") && runnerName.endsWith(" (with DemoSpace Fixtures)"))
{
return runner;
}
}
Runner runner = Runner.newInstance("Java");
runner.setEnvironmentType(EnvironmentType.newInstance("JAVA"));
return runner;
}
private void doImportDemoSite()
throws FileNotFoundException, ImportExportException
{
LOGGER.info("Importing DEMO site");
URL demoSiteZipUrl = DemoSpaceAction.class.getResource("/com/greenpepper/confluence/demo/demo-site.zip");
if (demoSiteZipUrl == null)
{
throw new FileNotFoundException("Cannot find demo-site.zip");
}
DefaultImportContext ctx = new DefaultImportContext(demoSiteZipUrl, getRemoteUser());
final Date importStart = new Date();
ctx.setPostProcessor(new ImportedObjectPostProcessor()
{
public boolean process(Object obj)
{
if (obj instanceof ConfluenceEntityObject)
{
ConfluenceEntityObject entityObject = (ConfluenceEntityObject)obj;
// Make pages appear in recent updated in preference to non-pages.
if (entityObject instanceof Page)
{
entityObject.setLastModificationDate(new Date());
}
else
{
entityObject.setLastModificationDate(importStart);
}
return true;
}
return false;
}
});
getImportExportManager().doImport(ctx);
}
/**
* doRemoveDemoSpace.
*
* @return a {@link java.lang.String} object.
*/
public String doRemoveDemoSpace()
{
LOGGER.info("Removing DEMO space.");
try
{
Space demoSpace = getDemoSpace();
if (demoSpace != null)
{
gpUtil.getSpaceManager().removeSpace(demoSpace);
}
gpUtil.getGPServerService().removeProject(getDemoProject(), true);
}
catch (Exception ex)
{
LOGGER.error("ERROR Removing DEMO space", ex);
addActionError(ex.getMessage());
}
return SUCCESS;
}
/**
* getDemoSpaceUrl.
*
* @return a {@link java.lang.String} object.
*/
public String getDemoSpaceUrl()
{
Space demoSpace = getDemoSpace();
return String.format("%s/display/%s", gpUtil.getBaseUrl(), demoSpace.getKey());
}
/**
* {@inheritDoc}
*
* Custom I18n. Based on WebWork i18n.
*/
@HtmlSafe
public String getText(String key)
{
String text = super.getText(key);
if (text.equals(key))
{
text = I18nUtil.getText(key, getResourceBundle());
}
return text;
}
private ResourceBundle getResourceBundle() {
if (resourceBundle == null)
{
Locale locale = threadLocale.get();
if (locale == null)
{
locale = getLocale();
threadLocale.set(locale == null ? Locale.ENGLISH : locale);
}
resourceBundle = ResourceBundle.getBundle(RESOURCE_BUNDLE, locale);
}
return resourceBundle;
}
/**
* Getter for the field importExportManager
.
*
* @return a {@link com.atlassian.confluence.importexport.ImportExportManager} object.
*/
public ImportExportManager getImportExportManager()
{
if (importExportManager == null)
{
importExportManager = (ImportExportManager)ContainerManager.getComponent("importExportManager");
}
return importExportManager;
}
/**
* Setter for the field importExportManager
.
*
* @param importExportManager a {@link com.atlassian.confluence.importexport.ImportExportManager} object.
*/
public void setImportExportManager(ImportExportManager importExportManager)
{
this.importExportManager = importExportManager;
}
/**
* isAllowRemoteApiAnonymous.
*
* @return a boolean.
*/
public boolean isAllowRemoteApiAnonymous()
{
return gpUtil.getSettingsManager().getGlobalSettings().isAllowRemoteApiAnonymous();
}
/**
* getGeneralConfigSecurityRemoteApiUrl.
*
* @return a {@link java.lang.String} object.
*/
public String getGeneralConfigSecurityRemoteApiUrl()
{
return String.format("%s/admin/editgeneralconfig.action#security",
gpUtil.getSettingsManager().getGlobalSettings().getBaseUrl());
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy