mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
MOB-690 - WCM PreviewURIService - checkpoint
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@14642 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -39,7 +39,7 @@
|
|||||||
<types>
|
<types>
|
||||||
|
|
||||||
<type name="wca:webfolder">
|
<type name="wca:webfolder">
|
||||||
<title>AVM Website Folder</title>
|
<title>WCM Web Project Folder</title>
|
||||||
<parent>wcm:avmfolder</parent>
|
<parent>wcm:avmfolder</parent>
|
||||||
<properties>
|
<properties>
|
||||||
<!-- root name of the avm staging stores for this web folder -->
|
<!-- root name of the avm staging stores for this web folder -->
|
||||||
@@ -76,6 +76,11 @@
|
|||||||
<title>Used as a template website</title>
|
<title>Used as a template website</title>
|
||||||
<type>d:boolean</type>
|
<type>d:boolean</type>
|
||||||
</property>
|
</property>
|
||||||
|
<!-- Preview URI Service Provider Name (since 3.2) -->
|
||||||
|
<property name="wca:previewprovidername">
|
||||||
|
<title>Preview Provider</title>
|
||||||
|
<type>d:text</type>
|
||||||
|
</property>
|
||||||
</properties>
|
</properties>
|
||||||
<associations>
|
<associations>
|
||||||
<child-association name="wca:webuser">
|
<child-association name="wca:webuser">
|
||||||
|
@@ -53,6 +53,7 @@
|
|||||||
<property name="personService" ref="PersonService"/>
|
<property name="personService" ref="PersonService"/>
|
||||||
<property name="sandboxFactory" ref="sandboxFactory"/>
|
<property name="sandboxFactory" ref="sandboxFactory"/>
|
||||||
<property name="virtServerRegistry" ref="VirtServerRegistry"/>
|
<property name="virtServerRegistry" ref="VirtServerRegistry"/>
|
||||||
|
<property name="previewURIServiceRegistry" ref="previewURIServiceRegistry"/>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
|
|
||||||
@@ -233,4 +234,73 @@
|
|||||||
<property name="namespaceService" ref="NamespaceService"/>
|
<property name="namespaceService" ref="NamespaceService"/>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
|
<!-- PreviewURI Service -->
|
||||||
|
|
||||||
|
<!-- PreviewURI service bean - note: named WCMPreviewURIService to allow backwards compatibility with deprecated "PreviewURIService" (as hard-coded in AVMUtil) -->
|
||||||
|
<bean id="WCMPreviewURIService" class="org.springframework.aop.framework.ProxyFactoryBean">
|
||||||
|
<property name="proxyInterfaces">
|
||||||
|
<value>org.alfresco.wcm.preview.PreviewURIService</value>
|
||||||
|
</property>
|
||||||
|
<property name="target">
|
||||||
|
<ref bean="previewURIService"/>
|
||||||
|
</property>
|
||||||
|
<property name="interceptorNames">
|
||||||
|
<list>
|
||||||
|
<idref local="PreviewURIService_transaction"/>
|
||||||
|
<idref bean="AuditMethodInterceptor"/>
|
||||||
|
<idref bean="exceptionTranslator"/>
|
||||||
|
<idref local="PreviewURIService_security"/>
|
||||||
|
</list>
|
||||||
|
</property>
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<!-- PreviewURI Service service transaction bean -->
|
||||||
|
<bean id="PreviewURIService_transaction" class="org.springframework.transaction.interceptor.TransactionInterceptor">
|
||||||
|
<property name="transactionManager">
|
||||||
|
<ref bean="transactionManager"/>
|
||||||
|
</property>
|
||||||
|
<property name="transactionAttributes">
|
||||||
|
<props>
|
||||||
|
<prop key="get*">${server.transaction.mode.readOnly}</prop>
|
||||||
|
<prop key="*">${server.transaction.mode.default}</prop>
|
||||||
|
</props>
|
||||||
|
</property>
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<!-- PreviewURIService service security bean -->
|
||||||
|
<bean id="PreviewURIService_security" class="org.alfresco.repo.security.permissions.impl.AlwaysProceedMethodInterceptor" />
|
||||||
|
|
||||||
|
<bean id="previewURIService" class="org.alfresco.wcm.preview.PreviewURIServiceImpl">
|
||||||
|
<property name="webProjectService" ref="WebProjectService"/>
|
||||||
|
<property name="previewURIServiceRegistry" ref="previewURIServiceRegistry"/>
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<!-- override this bean in a custom-wcm-preview-context.xml file to extend/change list of preview providers -->
|
||||||
|
<bean id="previewURIServiceRegistry" class="org.alfresco.wcm.preview.PreviewURIServiceRegistryImpl">
|
||||||
|
<property name="defaultProviderName">
|
||||||
|
<value>Virtualisation Server Preview</value>
|
||||||
|
</property>
|
||||||
|
<property name="previewURIServiceProvidersByName">
|
||||||
|
<map>
|
||||||
|
<entry key="Virtualisation Server Preview">
|
||||||
|
<ref bean="virtServerPreviewURIService"/>
|
||||||
|
</entry>
|
||||||
|
<!--
|
||||||
|
<entry key="NOOP Preview">
|
||||||
|
<ref bean="nullPreviewURIService"/>
|
||||||
|
</entry>
|
||||||
|
-->
|
||||||
|
</map>
|
||||||
|
</property>
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean id="basePreviewURIServiceProvider" class="org.alfresco.wcm.preview.AbstractPreviewURIServiceProvider" abstract="true"/>
|
||||||
|
|
||||||
|
<bean id="virtServerPreviewURIService" class="org.alfresco.wcm.preview.VirtualisationServerPreviewURIService" parent="basePreviewURIServiceProvider">
|
||||||
|
<property name="avmService" ref="AVMService"/>
|
||||||
|
<property name="virtServerRegistry" ref="VirtServerRegistry"/>
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<bean id="nullPreviewURIService" class="org.alfresco.wcm.preview.NullPreviewURIService" parent="basePreviewURIServiceProvider"/>
|
||||||
|
|
||||||
</beans>
|
</beans>
|
||||||
|
@@ -40,6 +40,7 @@ public interface WCMAppModel
|
|||||||
static final QName PROP_SELECTEDDEPLOYTO = QName.createQName(NamespaceService.WCMAPP_MODEL_1_0_URI, "selecteddeployto");
|
static final QName PROP_SELECTEDDEPLOYTO = QName.createQName(NamespaceService.WCMAPP_MODEL_1_0_URI, "selecteddeployto");
|
||||||
static final QName PROP_SELECTEDDEPLOYVERSION = QName.createQName(NamespaceService.WCMAPP_MODEL_1_0_URI, "selecteddeployversion");
|
static final QName PROP_SELECTEDDEPLOYVERSION = QName.createQName(NamespaceService.WCMAPP_MODEL_1_0_URI, "selecteddeployversion");
|
||||||
static final QName PROP_ISSOURCE = QName.createQName(NamespaceService.WCMAPP_MODEL_1_0_URI, "issource");
|
static final QName PROP_ISSOURCE = QName.createQName(NamespaceService.WCMAPP_MODEL_1_0_URI, "issource");
|
||||||
|
static final QName PROP_PREVIEW_PROVIDER = QName.createQName(NamespaceService.WCMAPP_MODEL_1_0_URI, "previewprovidername");
|
||||||
static final QName ASSOC_WEBUSER = QName.createQName(NamespaceService.WCMAPP_MODEL_1_0_URI, "webuser");
|
static final QName ASSOC_WEBUSER = QName.createQName(NamespaceService.WCMAPP_MODEL_1_0_URI, "webuser");
|
||||||
static final QName ASSOC_WEBFORM = QName.createQName(NamespaceService.WCMAPP_MODEL_1_0_URI, "webform");
|
static final QName ASSOC_WEBFORM = QName.createQName(NamespaceService.WCMAPP_MODEL_1_0_URI, "webform");
|
||||||
static final QName ASSOC_WEBWORKFLOWDEFAULTS = QName.createQName(NamespaceService.WCMAPP_MODEL_1_0_URI, "webworkflowdefaults");
|
static final QName ASSOC_WEBWORKFLOWDEFAULTS = QName.createQName(NamespaceService.WCMAPP_MODEL_1_0_URI, "webworkflowdefaults");
|
||||||
|
@@ -198,7 +198,7 @@ public final class AVM extends BaseScopableProcessorExtension
|
|||||||
*/
|
*/
|
||||||
public String websiteStagingUrl(String storeId)
|
public String websiteStagingUrl(String storeId)
|
||||||
{
|
{
|
||||||
return WCMUtil.buildStoreUrl(this.services.getAVMService(), storeId, getVServerDomain(), getVServerPort());
|
return this.services.getPreviewURIService().getPreviewURI(storeId, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -220,9 +220,9 @@ public final class AVM extends BaseScopableProcessorExtension
|
|||||||
*
|
*
|
||||||
* @return the preview URL to the specified store asset
|
* @return the preview URL to the specified store asset
|
||||||
*/
|
*/
|
||||||
public String assetUrl(String store, String assetPath)
|
public String assetUrl(String storeId, String assetPath)
|
||||||
{
|
{
|
||||||
return WCMUtil.buildAssetUrl(assetPath, getVServerDomain(), getVServerPort(), WCMUtil.lookupStoreDNS(this.services.getAVMService(), store));
|
return this.services.getPreviewURIService().getPreviewURI(storeId, assetPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -241,32 +241,6 @@ public final class AVM extends BaseScopableProcessorExtension
|
|||||||
return assetUrl(s[0], s[1]);
|
return assetUrl(s[0], s[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @return VServer Port
|
|
||||||
*/
|
|
||||||
private String getVServerPort()
|
|
||||||
{
|
|
||||||
Integer port = this.services.getVirtServerRegistry().getVirtServerHttpPort();
|
|
||||||
if (port == null)
|
|
||||||
{
|
|
||||||
port = JNDIConstants.DEFAULT_VSERVER_PORT;
|
|
||||||
}
|
|
||||||
return port.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return VServer Domain
|
|
||||||
*/
|
|
||||||
private String getVServerDomain()
|
|
||||||
{
|
|
||||||
String domain = this.services.getVirtServerRegistry().getVirtServerFQDN();
|
|
||||||
if (domain == null)
|
|
||||||
{
|
|
||||||
domain = JNDIConstants.DEFAULT_VSERVER_IP;
|
|
||||||
}
|
|
||||||
return domain;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the path to the webapps folder in a standard web store.
|
* @return the path to the webapps folder in a standard web store.
|
||||||
*/
|
*/
|
||||||
|
@@ -75,6 +75,7 @@ import org.alfresco.service.namespace.NamespaceService;
|
|||||||
import org.alfresco.service.namespace.QName;
|
import org.alfresco.service.namespace.QName;
|
||||||
import org.alfresco.service.transaction.TransactionService;
|
import org.alfresco.service.transaction.TransactionService;
|
||||||
import org.alfresco.wcm.asset.AssetService;
|
import org.alfresco.wcm.asset.AssetService;
|
||||||
|
import org.alfresco.wcm.preview.PreviewURIService;
|
||||||
import org.alfresco.wcm.sandbox.SandboxService;
|
import org.alfresco.wcm.sandbox.SandboxService;
|
||||||
import org.alfresco.wcm.webproject.WebProjectService;
|
import org.alfresco.wcm.webproject.WebProjectService;
|
||||||
import org.springframework.beans.BeansException;
|
import org.springframework.beans.BeansException;
|
||||||
@@ -493,6 +494,14 @@ public class ServiceDescriptorRegistry
|
|||||||
return (AssetService)getService(ASSET_SERVICE);
|
return (AssetService)getService(ASSET_SERVICE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.alfresco.service.ServiceRegistry#getPreviewURIService()
|
||||||
|
*/
|
||||||
|
public PreviewURIService getPreviewURIService()
|
||||||
|
{
|
||||||
|
return (PreviewURIService)getService(PREVIEW_URI_SERVICE);
|
||||||
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.alfresco.service.ServiceRegistry#getFormService()
|
* @see org.alfresco.service.ServiceRegistry#getFormService()
|
||||||
*/
|
*/
|
||||||
|
@@ -188,7 +188,7 @@ public class AVM extends BaseTemplateProcessorExtension
|
|||||||
*/
|
*/
|
||||||
public String websiteStagingUrl(String storeId)
|
public String websiteStagingUrl(String storeId)
|
||||||
{
|
{
|
||||||
return WCMUtil.buildStoreUrl(this.services.getAVMService(), storeId, getVServerDomain(), getVServerPort());
|
return this.services.getPreviewURIService().getPreviewURI(storeId, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -210,9 +210,9 @@ public class AVM extends BaseTemplateProcessorExtension
|
|||||||
*
|
*
|
||||||
* @return the preview URL to the specified store asset
|
* @return the preview URL to the specified store asset
|
||||||
*/
|
*/
|
||||||
public String assetUrl(String store, String assetPath)
|
public String assetUrl(String storeId, String assetPath)
|
||||||
{
|
{
|
||||||
return WCMUtil.buildAssetUrl(assetPath, getVServerDomain(), getVServerPort(), WCMUtil.lookupStoreDNS(this.services.getAVMService(), store));
|
return this.services.getPreviewURIService().getPreviewURI(storeId, assetPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -231,32 +231,6 @@ public class AVM extends BaseTemplateProcessorExtension
|
|||||||
return assetUrl(s[0], s[1]);
|
return assetUrl(s[0], s[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @return VServer Port
|
|
||||||
*/
|
|
||||||
private String getVServerPort()
|
|
||||||
{
|
|
||||||
Integer port = this.services.getVirtServerRegistry().getVirtServerHttpPort();
|
|
||||||
if (port == null)
|
|
||||||
{
|
|
||||||
port = JNDIConstants.DEFAULT_VSERVER_PORT;
|
|
||||||
}
|
|
||||||
return port.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return VServer Domain
|
|
||||||
*/
|
|
||||||
private String getVServerDomain()
|
|
||||||
{
|
|
||||||
String domain = this.services.getVirtServerRegistry().getVirtServerFQDN();
|
|
||||||
if (domain == null)
|
|
||||||
{
|
|
||||||
domain = JNDIConstants.DEFAULT_VSERVER_IP;
|
|
||||||
}
|
|
||||||
return domain;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the path to the webapps folder in a standard web store.
|
* @return the path to the webapps folder in a standard web store.
|
||||||
*/
|
*/
|
||||||
|
@@ -74,6 +74,7 @@ import org.alfresco.service.namespace.NamespaceService;
|
|||||||
import org.alfresco.service.namespace.QName;
|
import org.alfresco.service.namespace.QName;
|
||||||
import org.alfresco.service.transaction.TransactionService;
|
import org.alfresco.service.transaction.TransactionService;
|
||||||
import org.alfresco.wcm.asset.AssetService;
|
import org.alfresco.wcm.asset.AssetService;
|
||||||
|
import org.alfresco.wcm.preview.PreviewURIService;
|
||||||
import org.alfresco.wcm.sandbox.SandboxService;
|
import org.alfresco.wcm.sandbox.SandboxService;
|
||||||
import org.alfresco.wcm.webproject.WebProjectService;
|
import org.alfresco.wcm.webproject.WebProjectService;
|
||||||
|
|
||||||
@@ -125,21 +126,26 @@ public interface ServiceRegistry
|
|||||||
static final QName OWNABLE_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "OwnableService");
|
static final QName OWNABLE_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "OwnableService");
|
||||||
static final QName PERSON_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "PersonService");
|
static final QName PERSON_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "PersonService");
|
||||||
static final QName SITE_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "SiteService");
|
static final QName SITE_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "SiteService");
|
||||||
|
static final QName ATTRIBUTE_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "AttributeService");
|
||||||
|
static final QName THUMBNAIL_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "ThumbnailService");
|
||||||
|
static final QName TAGGING_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "TaggingService");
|
||||||
|
static final QName FORM_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "FormService");
|
||||||
|
static final QName INVITATION_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "InvitationService");
|
||||||
|
|
||||||
|
// WCM / AVM
|
||||||
static final QName AVM_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "AVMService");
|
static final QName AVM_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "AVMService");
|
||||||
static final QName AVM_LOCKING_AWARE_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "AVMLockingAwareService");
|
static final QName AVM_LOCKING_AWARE_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "AVMLockingAwareService");
|
||||||
static final QName AVM_SYNC_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "AVMSyncService");
|
static final QName AVM_SYNC_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "AVMSyncService");
|
||||||
static final QName CROSS_REPO_COPY_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "CrossRepositoryCopyService");
|
static final QName CROSS_REPO_COPY_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "CrossRepositoryCopyService");
|
||||||
static final QName ATTRIBUTE_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "AttributeService");
|
|
||||||
static final QName AVM_LOCKING_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "AVMLockingService");
|
static final QName AVM_LOCKING_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "AVMLockingService");
|
||||||
static final QName VIRT_SERVER_REGISTRY = QName.createQName(NamespaceService.ALFRESCO_URI, "VirtServerRegistry");
|
static final QName VIRT_SERVER_REGISTRY = QName.createQName(NamespaceService.ALFRESCO_URI, "VirtServerRegistry");
|
||||||
static final QName THUMBNAIL_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "ThumbnailService");
|
|
||||||
static final QName TAGGING_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "TaggingService");
|
|
||||||
static final QName DEPLOYMENT_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "DeploymentService");
|
static final QName DEPLOYMENT_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "DeploymentService");
|
||||||
static final QName WEBPROJECT_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "WebProjectService");
|
static final QName WEBPROJECT_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "WebProjectService");
|
||||||
static final QName SANDBOX_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "SandboxService");
|
static final QName SANDBOX_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "SandboxService");
|
||||||
static final QName ASSET_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "AssetService");
|
static final QName ASSET_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "AssetService");
|
||||||
static final QName FORM_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "FormService");
|
static final QName PREVIEW_URI_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "WCMPreviewURIService");
|
||||||
static final QName INVITATION_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "InvitationService");
|
|
||||||
|
// CMIS
|
||||||
static final QName CMIS_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "CMISService");
|
static final QName CMIS_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "CMISService");
|
||||||
static final QName CMIS_DICTIONARY_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "CMISDictionaryService");
|
static final QName CMIS_DICTIONARY_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "CMISDictionaryService");
|
||||||
static final QName CMIS_QUERY_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "CMISQueryService");
|
static final QName CMIS_QUERY_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "CMISQueryService");
|
||||||
@@ -432,7 +438,7 @@ public interface ServiceRegistry
|
|||||||
TaggingService getTaggingService();
|
TaggingService getTaggingService();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the Deployment Service
|
* Get the WCM Deployment Service
|
||||||
* @return the deployment service (or null, if one is not provided)
|
* @return the deployment service (or null, if one is not provided)
|
||||||
*/
|
*/
|
||||||
@NotAuditable
|
@NotAuditable
|
||||||
@@ -459,6 +465,13 @@ public interface ServiceRegistry
|
|||||||
@NotAuditable
|
@NotAuditable
|
||||||
AssetService getAssetService();
|
AssetService getAssetService();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the WCM Preview URI Service
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@NotAuditable
|
||||||
|
PreviewURIService getPreviewURIService();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the form service (or null if one is not provided)
|
* Get the form service (or null if one is not provided)
|
||||||
* @return
|
* @return
|
||||||
|
@@ -49,14 +49,14 @@ import org.springframework.context.support.ClassPathXmlApplicationContext;
|
|||||||
*/
|
*/
|
||||||
public class AbstractWCMServiceImplTest extends TestCase
|
public class AbstractWCMServiceImplTest extends TestCase
|
||||||
{
|
{
|
||||||
|
private static final String PREVIEW_CONFIG_LOCATION = "classpath:wcm/wcm-test-preview-context.xml";
|
||||||
|
|
||||||
// override jbpm.job.executor idleInterval to 5s (was 1.5m) for WCM unit tests
|
// override jbpm.job.executor idleInterval to 5s (was 1.5m) for WCM unit tests
|
||||||
private static final String SUBMIT_CONFIG_LOCATION = "classpath:wcm/wcm-jbpm-context.xml";
|
private static final String SUBMIT_CONFIG_LOCATION = "classpath:wcm/wcm-jbpm-context.xml";
|
||||||
protected static final long SUBMIT_DELAY = 15000L; // (in millis) 15s - to allow async submit direct workflow to complete (as per 5s idleInterval above)
|
protected static final long SUBMIT_DELAY = 15000L; // (in millis) 15s - to allow async submit direct workflow to complete (as per 5s idleInterval above)
|
||||||
|
|
||||||
|
// note: all tests share same context (when run via WCMTestSuite)
|
||||||
protected static ApplicationContext ctx =new ClassPathXmlApplicationContext(
|
protected static ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[] {ApplicationContextHelper.CONFIG_LOCATIONS[0], SUBMIT_CONFIG_LOCATION, PREVIEW_CONFIG_LOCATION});;
|
||||||
new String[] {ApplicationContextHelper.CONFIG_LOCATIONS[0], SUBMIT_CONFIG_LOCATION}
|
|
||||||
);
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// test data
|
// test data
|
||||||
@@ -95,7 +95,6 @@ public class AbstractWCMServiceImplTest extends TestCase
|
|||||||
|
|
||||||
private TransactionService transactionService;
|
private TransactionService transactionService;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void setUp() throws Exception
|
protected void setUp() throws Exception
|
||||||
{
|
{
|
||||||
|
@@ -28,6 +28,7 @@ import junit.framework.Test;
|
|||||||
import junit.framework.TestSuite;
|
import junit.framework.TestSuite;
|
||||||
|
|
||||||
import org.alfresco.wcm.asset.AssetServiceImplTest;
|
import org.alfresco.wcm.asset.AssetServiceImplTest;
|
||||||
|
import org.alfresco.wcm.preview.PreviewURIServiceImplTest;
|
||||||
import org.alfresco.wcm.sandbox.SandboxServiceImplTest;
|
import org.alfresco.wcm.sandbox.SandboxServiceImplTest;
|
||||||
import org.alfresco.wcm.webproject.WebProjectServiceImplTest;
|
import org.alfresco.wcm.webproject.WebProjectServiceImplTest;
|
||||||
import org.alfresco.wcm.webproject.script.ScriptWebProjectsTest;
|
import org.alfresco.wcm.webproject.script.ScriptWebProjectsTest;
|
||||||
@@ -52,6 +53,7 @@ public class WCMTestSuite extends TestSuite
|
|||||||
suite.addTestSuite(AssetServiceImplTest.class);
|
suite.addTestSuite(AssetServiceImplTest.class);
|
||||||
suite.addTestSuite(SandboxServiceImplTest.class);
|
suite.addTestSuite(SandboxServiceImplTest.class);
|
||||||
suite.addTestSuite(ScriptWebProjectsTest.class);
|
suite.addTestSuite(ScriptWebProjectsTest.class);
|
||||||
|
suite.addTestSuite(PreviewURIServiceImplTest.class);
|
||||||
|
|
||||||
return suite;
|
return suite;
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,64 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2005-2009 Alfresco Software Limited.
|
||||||
|
*
|
||||||
|
* This program 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 program 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
* As a special exception to the terms and conditions of version 2.0 of
|
||||||
|
* the GPL, you may redistribute this Program in connection with Free/Libre
|
||||||
|
* and Open Source Software ("FLOSS") applications as described in Alfresco's
|
||||||
|
* FLOSS exception. You should have received a copy of the text describing
|
||||||
|
* the FLOSS exception, and it is also available here:
|
||||||
|
* http://www.alfresco.com/legal/licensing"
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.alfresco.wcm.preview;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Abstract Preview URI Service Provider
|
||||||
|
*
|
||||||
|
* @author janv
|
||||||
|
*
|
||||||
|
* @since 3.2
|
||||||
|
*/
|
||||||
|
public abstract class AbstractPreviewURIServiceProvider implements PreviewURIServiceProvider
|
||||||
|
{
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.alfresco.wcm.preview.PreviewURIServiceProvider#getPreviewURI(java.lang.String, java.lang.String, org.alfresco.wcm.preview.PreviewContext)
|
||||||
|
*/
|
||||||
|
abstract public String getPreviewURI(String sbStoreId, String relativePath, PreviewContext previewContext);
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.alfresco.wcm.preview.PreviewURIServiceProvider#getPreviewURIs(java.lang.String, java.util.List, org.alfresco.wcm.preview.PreviewContext)
|
||||||
|
*/
|
||||||
|
public List<String> getPreviewURIs(String sbStoreId, List<String> relativePaths, PreviewContext previewContext)
|
||||||
|
{
|
||||||
|
List<String> previewURIs = null;
|
||||||
|
|
||||||
|
if (relativePaths != null)
|
||||||
|
{
|
||||||
|
previewURIs = new ArrayList<String>(relativePaths.size());
|
||||||
|
for (String relativePath : relativePaths)
|
||||||
|
{
|
||||||
|
previewURIs.add(getPreviewURI(sbStoreId, relativePath, previewContext));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return previewURIs;
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2005-2009 Alfresco Software Limited.
|
||||||
|
*
|
||||||
|
* This program 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 program 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
* As a special exception to the terms and conditions of version 2.0 of
|
||||||
|
* the GPL, you may redistribute this Program in connection with Free/Libre
|
||||||
|
* and Open Source Software ("FLOSS") applications as described in Alfresco's
|
||||||
|
* FLOSS exception. You should have received a copy of the text describing
|
||||||
|
* the FLOSS exception, and it is also available here:
|
||||||
|
* http://www.alfresco.com/legal/licensing"
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.alfresco.wcm.preview;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A PreviewURIService that always returns null (no preview URI).
|
||||||
|
*
|
||||||
|
* @author Peter Monks, janv
|
||||||
|
*
|
||||||
|
* @since 3.2
|
||||||
|
*/
|
||||||
|
public class NullPreviewURIService extends AbstractPreviewURIServiceProvider
|
||||||
|
{
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.alfresco.wcm.preview.PreviewURIServiceProvider#getPreviewURI(java.lang.String, java.lang.String, org.alfresco.wcm.preview.PreviewContext)
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String getPreviewURI(final String storeId, final String webapp, final PreviewContext previewContext)
|
||||||
|
{
|
||||||
|
return(null);
|
||||||
|
}
|
||||||
|
}
|
63
source/java/org/alfresco/wcm/preview/PreviewContext.java
Normal file
63
source/java/org/alfresco/wcm/preview/PreviewContext.java
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2005-2009 Alfresco Software Limited.
|
||||||
|
*
|
||||||
|
* This program 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 program 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
* As a special exception to the terms and conditions of version 2.0 of
|
||||||
|
* the GPL, you may redistribute this Program in connection with Free/Libre
|
||||||
|
* and Open Source Software ("FLOSS") applications as described in Alfresco's
|
||||||
|
* FLOSS exception. You should have received a copy of the text describing
|
||||||
|
* the FLOSS exception, and it is also available here:
|
||||||
|
* http://www.alfresco.com/legal/licensing"
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.alfresco.wcm.preview;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Additional context Preview URI Service Providers
|
||||||
|
*
|
||||||
|
* @author janv
|
||||||
|
*
|
||||||
|
* @since 3.2
|
||||||
|
*/
|
||||||
|
public class PreviewContext
|
||||||
|
{
|
||||||
|
private String wpStoreId;
|
||||||
|
private String webApp; // can be null
|
||||||
|
private String authenticatedUser;
|
||||||
|
|
||||||
|
/* package */ PreviewContext(String wpStoreId, String webApp, String authenticatedUser)
|
||||||
|
{
|
||||||
|
this.wpStoreId = wpStoreId;
|
||||||
|
this.webApp = webApp;
|
||||||
|
this.authenticatedUser = authenticatedUser;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getWpStoreId()
|
||||||
|
{
|
||||||
|
return wpStoreId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getWebApp()
|
||||||
|
{
|
||||||
|
return webApp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAuthenticatedUser()
|
||||||
|
{
|
||||||
|
return authenticatedUser;
|
||||||
|
}
|
||||||
|
}
|
76
source/java/org/alfresco/wcm/preview/PreviewURIService.java
Normal file
76
source/java/org/alfresco/wcm/preview/PreviewURIService.java
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2005-2009 Alfresco Software Limited.
|
||||||
|
*
|
||||||
|
* This program 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 program 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
* As a special exception to the terms and conditions of version 2.0 of
|
||||||
|
* the GPL, you may redistribute this Program in connection with Free/Libre
|
||||||
|
* and Open Source Software ("FLOSS") applications as described in Alfresco's
|
||||||
|
* FLOSS exception. You should have received a copy of the text describing
|
||||||
|
* the FLOSS exception, and it is also available here:
|
||||||
|
* http://www.alfresco.com/legal/licensing"
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.alfresco.wcm.preview;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Client API for retrieving/generating preview URIs
|
||||||
|
*
|
||||||
|
* @author janv
|
||||||
|
*
|
||||||
|
* @since 3.2
|
||||||
|
*/
|
||||||
|
public interface PreviewURIService
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param sbStoreId The sandbox store id to generate the preview URI for.
|
||||||
|
* @param pathToAsset The path to the asset to generate the preview URI for (can be null or empty, to return preview URL to store).
|
||||||
|
*
|
||||||
|
* @return The Preview URI for the given sandbox and/or asset (<i>may be null</i>).
|
||||||
|
*/
|
||||||
|
public String getPreviewURI(String sbStoreId, String pathToAsset);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param sbStoreId The sandbox store id to generate the preview URI for.
|
||||||
|
* @param pathsToAssets List of paths to the assets to generate the preview URI for.
|
||||||
|
*
|
||||||
|
* @return The Preview URI for the given assets (<i>may be null</i>).
|
||||||
|
*/
|
||||||
|
public List<String> getPreviewURIs(String sbStoreId, List<String> pathsToAssets);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return list of registered Preview URI service providers
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public Set<String> getProviderNames();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return default Preview URI service provider
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String getDefaultProviderName();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return Preview URI service provider configured for web project
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String getProviderName(String wpStoreId);
|
||||||
|
}
|
136
source/java/org/alfresco/wcm/preview/PreviewURIServiceImpl.java
Normal file
136
source/java/org/alfresco/wcm/preview/PreviewURIServiceImpl.java
Normal file
@@ -0,0 +1,136 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2005-2009 Alfresco Software Limited.
|
||||||
|
*
|
||||||
|
* This program 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 program 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
* As a special exception to the terms and conditions of version 2.0 of
|
||||||
|
* the GPL, you may redistribute this Program in connection with Free/Libre
|
||||||
|
* and Open Source Software ("FLOSS") applications as described in Alfresco's
|
||||||
|
* FLOSS exception. You should have recieved a copy of the text describing
|
||||||
|
* the FLOSS exception, and it is also available here:
|
||||||
|
* http://www.alfresco.com/legal/licensing"
|
||||||
|
*/
|
||||||
|
package org.alfresco.wcm.preview;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
||||||
|
import org.alfresco.util.ParameterCheck;
|
||||||
|
import org.alfresco.wcm.util.WCMUtil;
|
||||||
|
import org.alfresco.wcm.webproject.WebProjectService;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Preview URI Service fundamental API.
|
||||||
|
* <p>
|
||||||
|
* This service API is designed to support the Preview URI API
|
||||||
|
*
|
||||||
|
* @author janv
|
||||||
|
*
|
||||||
|
* @since 3.2
|
||||||
|
*/
|
||||||
|
public class PreviewURIServiceImpl implements PreviewURIService
|
||||||
|
{
|
||||||
|
private PreviewURIServiceRegistry previewURIProviderRegistry;
|
||||||
|
private WebProjectService wpService;
|
||||||
|
|
||||||
|
public void setPreviewURIServiceRegistry(PreviewURIServiceRegistry previewURIProviderRegistry)
|
||||||
|
{
|
||||||
|
this.previewURIProviderRegistry = previewURIProviderRegistry;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWebProjectService(WebProjectService wpService)
|
||||||
|
{
|
||||||
|
this.wpService = wpService;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.alfresco.wcm.preview.PreviewURIService#getPreviewURI(java.lang.String, java.lang.String)
|
||||||
|
*/
|
||||||
|
public String getPreviewURI(String sbStoreId, String pathToAsset)
|
||||||
|
{
|
||||||
|
ParameterCheck.mandatoryString("sbStoreId", sbStoreId);
|
||||||
|
|
||||||
|
String wpStoreId = WCMUtil.getWebProjectStoreId(sbStoreId);
|
||||||
|
String authenticatedUser = AuthenticationUtil.getFullyAuthenticatedUser();
|
||||||
|
|
||||||
|
String webApp = null;
|
||||||
|
if (pathToAsset != null)
|
||||||
|
{
|
||||||
|
webApp = WCMUtil.getWebapp(WCMUtil.buildPath(sbStoreId, pathToAsset));
|
||||||
|
}
|
||||||
|
|
||||||
|
PreviewContext prevCtx = new PreviewContext(wpStoreId, webApp, authenticatedUser);
|
||||||
|
|
||||||
|
return getProvider(wpStoreId).getPreviewURI(sbStoreId, pathToAsset, prevCtx);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.alfresco.wcm.preview.PreviewURIService#getPreviewURIs(java.lang.String, java.util.List)
|
||||||
|
*/
|
||||||
|
public List<String> getPreviewURIs(String sbStoreId, List<String> pathsToAssets)
|
||||||
|
{
|
||||||
|
ParameterCheck.mandatoryString("sbStoreId", sbStoreId);
|
||||||
|
ParameterCheck.mandatory("pathsToAssets", pathsToAssets);
|
||||||
|
|
||||||
|
String wpStoreId = WCMUtil.getWebProjectStoreId(sbStoreId);
|
||||||
|
String authenticatedUser = AuthenticationUtil.getFullyAuthenticatedUser();
|
||||||
|
|
||||||
|
String webApp = WCMUtil.getCommonWebApp(sbStoreId, pathsToAssets);
|
||||||
|
|
||||||
|
PreviewContext prevCtx = new PreviewContext(wpStoreId, webApp, authenticatedUser);
|
||||||
|
|
||||||
|
return getProvider(wpStoreId).getPreviewURIs(sbStoreId, pathsToAssets, prevCtx);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.alfresco.wcm.preview.PreviewURIService#getProviderNames()
|
||||||
|
*/
|
||||||
|
public Set<String> getProviderNames()
|
||||||
|
{
|
||||||
|
Map<String, PreviewURIServiceProvider> previewProviders = previewURIProviderRegistry.getPreviewURIServiceProviders();
|
||||||
|
return previewProviders.keySet();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.alfresco.wcm.preview.PreviewURIService#getDefaultProviderName()
|
||||||
|
*/
|
||||||
|
public String getDefaultProviderName()
|
||||||
|
{
|
||||||
|
// delegate
|
||||||
|
return previewURIProviderRegistry.getDefaultProviderName();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.alfresco.wcm.preview.PreviewURIService#getProviderName(java.lang.String)
|
||||||
|
*/
|
||||||
|
public String getProviderName(String wpStoreId)
|
||||||
|
{
|
||||||
|
// delegate
|
||||||
|
return wpService.getPreviewProvider(wpStoreId);
|
||||||
|
}
|
||||||
|
|
||||||
|
private PreviewURIServiceProvider getProvider(String wpStoreId)
|
||||||
|
{
|
||||||
|
PreviewURIServiceProvider previewProvider = previewURIProviderRegistry.getPreviewURIServiceProviders().get(getProviderName(wpStoreId));
|
||||||
|
if (previewProvider == null)
|
||||||
|
{
|
||||||
|
previewProvider = previewURIProviderRegistry.getPreviewURIServiceProviders().get(previewURIProviderRegistry.getDefaultProviderName());
|
||||||
|
}
|
||||||
|
return previewProvider;
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,104 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2005-2009 Alfresco Software Limited.
|
||||||
|
*
|
||||||
|
* This program 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 program 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
* As a special exception to the terms and conditions of version 2.0 of
|
||||||
|
* the GPL, you may redistribute this Program in connection with Free/Libre
|
||||||
|
* and Open Source Software ("FLOSS") applications as described in Alfresco's
|
||||||
|
* FLOSS exception. You should have recieved a copy of the text describing
|
||||||
|
* the FLOSS exception, and it is also available here:
|
||||||
|
* http://www.alfresco.com/legal/licensing"
|
||||||
|
*/
|
||||||
|
package org.alfresco.wcm.preview;
|
||||||
|
|
||||||
|
import java.text.MessageFormat;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.alfresco.wcm.AbstractWCMServiceImplTest;
|
||||||
|
import org.alfresco.wcm.webproject.WebProjectInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Preview URI Service implementation unit test
|
||||||
|
*
|
||||||
|
* @author janv
|
||||||
|
*/
|
||||||
|
public class PreviewURIServiceImplTest extends AbstractWCMServiceImplTest
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// services
|
||||||
|
//
|
||||||
|
private PreviewURIServiceRegistry previewURIServiceRegistry;
|
||||||
|
private PreviewURIService prevService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void setUp() throws Exception
|
||||||
|
{
|
||||||
|
super.setUp();
|
||||||
|
|
||||||
|
// Get the required services
|
||||||
|
previewURIServiceRegistry = (PreviewURIServiceRegistry)ctx.getBean("previewURIServiceRegistry");
|
||||||
|
prevService = (PreviewURIService)ctx.getBean("WCMPreviewURIService");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void tearDown() throws Exception
|
||||||
|
{
|
||||||
|
super.tearDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testSetup()
|
||||||
|
{
|
||||||
|
Map<String, PreviewURIServiceProvider> prevURIServiceProviders = previewURIServiceRegistry.getPreviewURIServiceProviders();
|
||||||
|
|
||||||
|
System.out.println(prevURIServiceProviders.keySet());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testDefaultAndNOOP()
|
||||||
|
{
|
||||||
|
// Create a web project
|
||||||
|
WebProjectInfo wpInfo = wpService.createWebProject(TEST_WEBPROJ_DNS+"-previewSimple", TEST_WEBPROJ_NAME+"-previewSimple", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION);
|
||||||
|
assertNotNull(wpInfo);
|
||||||
|
|
||||||
|
String stagingPreviewURL = prevService.getPreviewURI(wpInfo.getStagingStoreName(), null);
|
||||||
|
assertNotNull(stagingPreviewURL);
|
||||||
|
|
||||||
|
String expectedURL = MessageFormat.format(VirtualisationServerPreviewURIService.PREVIEW_SANDBOX_URL,
|
||||||
|
wpInfo.getStoreId(),
|
||||||
|
VirtualisationServerPreviewURIService.DEFAULT_VSERVER_IP,
|
||||||
|
""+VirtualisationServerPreviewURIService.DEFAULT_VSERVER_PORT);
|
||||||
|
|
||||||
|
assertEquals(expectedURL, stagingPreviewURL);
|
||||||
|
|
||||||
|
String nullProvName = null;
|
||||||
|
Map<String, PreviewURIServiceProvider> prevURIServiceProviders = previewURIServiceRegistry.getPreviewURIServiceProviders();
|
||||||
|
for (Map.Entry<String, PreviewURIServiceProvider> entry : prevURIServiceProviders.entrySet())
|
||||||
|
{
|
||||||
|
PreviewURIServiceProvider prov = entry.getValue();
|
||||||
|
if (prov instanceof NullPreviewURIService)
|
||||||
|
{
|
||||||
|
nullProvName = entry.getKey();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assertNotNull(nullProvName);
|
||||||
|
|
||||||
|
wpInfo.setPreviewProviderName(nullProvName);
|
||||||
|
wpService.updateWebProject(wpInfo);
|
||||||
|
|
||||||
|
stagingPreviewURL = prevService.getPreviewURI(wpInfo.getStagingStoreName(), null); // fails - returns 2 ?
|
||||||
|
assertNull(stagingPreviewURL);
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2005-2009 Alfresco Software Limited.
|
||||||
|
*
|
||||||
|
* This program 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 program 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
* As a special exception to the terms and conditions of version 2.0 of
|
||||||
|
* the GPL, you may redistribute this Program in connection with Free/Libre
|
||||||
|
* and Open Source Software ("FLOSS") applications as described in Alfresco's
|
||||||
|
* FLOSS exception. You should have received a copy of the text describing
|
||||||
|
* the FLOSS exception, and it is also available here:
|
||||||
|
* http://www.alfresco.com/legal/licensing"
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.alfresco.wcm.preview;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SPI (Service Provider Interface) abstraction for generating preview URLs.
|
||||||
|
*
|
||||||
|
* @author janv
|
||||||
|
*
|
||||||
|
* @since 3.2
|
||||||
|
*/
|
||||||
|
public interface PreviewURIServiceProvider
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param sbStoreId The sandbox store id to generate the preview URI for.
|
||||||
|
* @param pathToAsset The path to the asset to generate the preview URI for (can be null or empty, to return preview URL to store).
|
||||||
|
* @param previewContext Additional preview context
|
||||||
|
*
|
||||||
|
* @return The Preview URI for the given sandbox and/or asset (<i>may be null</i>).
|
||||||
|
*/
|
||||||
|
public String getPreviewURI(String sbStoreId, String pathToAsset, PreviewContext previewContext);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param sbStoreId The sandbox store id to generate the preview URI for.
|
||||||
|
* @param pathsToAssets The paths to the assets to generate the preview URI for.
|
||||||
|
* @param previewContext Additional preview context
|
||||||
|
*
|
||||||
|
* @return The Preview URIs for the given asset paths (<i>may be null</i>).
|
||||||
|
*/
|
||||||
|
public List<String> getPreviewURIs(String sbStoreId, List<String> pathsToAssets, PreviewContext previewContext);
|
||||||
|
}
|
@@ -0,0 +1,53 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2005-2009 Alfresco Software Limited.
|
||||||
|
*
|
||||||
|
* This program 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 program 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
* As a special exception to the terms and conditions of version 2.0 of
|
||||||
|
* the GPL, you may redistribute this Program in connection with Free/Libre
|
||||||
|
* and Open Source Software ("FLOSS") applications as described in Alfresco's
|
||||||
|
* FLOSS exception. You should have received a copy of the text describing
|
||||||
|
* the FLOSS exception, and it is also available here:
|
||||||
|
* http://www.alfresco.com/legal/licensing"
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.alfresco.wcm.preview;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Preview URI Service Provider Registry
|
||||||
|
*
|
||||||
|
* @author janv
|
||||||
|
*
|
||||||
|
* @since 3.2
|
||||||
|
*/
|
||||||
|
public interface PreviewURIServiceRegistry
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Return list of registered PreviewURI service providers
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public Map<String, PreviewURIServiceProvider> getPreviewURIServiceProviders();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return default PreviewURI service provider
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public String getDefaultProviderName();
|
||||||
|
}
|
@@ -0,0 +1,79 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2005-2009 Alfresco Software Limited.
|
||||||
|
*
|
||||||
|
* This program 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 program 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
* As a special exception to the terms and conditions of version 2.0 of
|
||||||
|
* the GPL, you may redistribute this Program in connection with Free/Libre
|
||||||
|
* and Open Source Software ("FLOSS") applications as described in Alfresco's
|
||||||
|
* FLOSS exception. You should have recieved a copy of the text describing
|
||||||
|
* the FLOSS exception, and it is also available here:
|
||||||
|
* http://www.alfresco.com/legal/licensing"
|
||||||
|
*/
|
||||||
|
package org.alfresco.wcm.preview;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.alfresco.error.AlfrescoRuntimeException;
|
||||||
|
import org.alfresco.util.PropertyCheck;
|
||||||
|
import org.springframework.beans.factory.InitializingBean;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Preview URI Service Provider Registry Implementation
|
||||||
|
*
|
||||||
|
* @author janv
|
||||||
|
*
|
||||||
|
* @since 3.2
|
||||||
|
*/
|
||||||
|
public class PreviewURIServiceRegistryImpl implements PreviewURIServiceRegistry, InitializingBean
|
||||||
|
{
|
||||||
|
private static final String ERR_INVALID_DEFAULT_PREVIEW_URI_SERVICE = "preview.err.invalid_default_preview_uri_service";
|
||||||
|
|
||||||
|
private Map<String, PreviewURIServiceProvider> previewURIServicesByName;
|
||||||
|
private String defaultPreviewURIServiceName;
|
||||||
|
|
||||||
|
public void setPreviewURIServiceProvidersByName(Map<String, PreviewURIServiceProvider> previewURIServicesByName)
|
||||||
|
{
|
||||||
|
this.previewURIServicesByName = previewURIServicesByName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, PreviewURIServiceProvider> getPreviewURIServiceProviders()
|
||||||
|
{
|
||||||
|
return this.previewURIServicesByName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDefaultProviderName(String defaultPreviewURIServiceName)
|
||||||
|
{
|
||||||
|
this.defaultPreviewURIServiceName = defaultPreviewURIServiceName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDefaultProviderName()
|
||||||
|
{
|
||||||
|
return this.defaultPreviewURIServiceName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void afterPropertiesSet() throws Exception
|
||||||
|
{
|
||||||
|
PropertyCheck.mandatory(this, "previewURIServicesByName", previewURIServicesByName);
|
||||||
|
PropertyCheck.mandatory(this, "defaultName", defaultPreviewURIServiceName);
|
||||||
|
|
||||||
|
// Check that the default preview URI service provider name is valid
|
||||||
|
if ((defaultPreviewURIServiceName.length() == 0) || (previewURIServicesByName.get(defaultPreviewURIServiceName) == null))
|
||||||
|
{
|
||||||
|
AlfrescoRuntimeException.create(ERR_INVALID_DEFAULT_PREVIEW_URI_SERVICE, defaultPreviewURIServiceName, previewURIServicesByName.keySet());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,91 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2005-2009 Alfresco Software Limited.
|
||||||
|
*
|
||||||
|
* This program 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 program 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
* As a special exception to the terms and conditions of version 2.0 of
|
||||||
|
* the GPL, you may redistribute this Program in connection with Free/Libre
|
||||||
|
* and Open Source Software ("FLOSS") applications as described in Alfresco's
|
||||||
|
* FLOSS exception. You should have received a copy of the text describing
|
||||||
|
* the FLOSS exception, and it is also available here:
|
||||||
|
* http://www.alfresco.com/legal/licensing"
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.alfresco.wcm.preview;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A PreviewURIService that takes a URI template and replaces the following parameters per request:
|
||||||
|
* <ul>
|
||||||
|
* <li>{storeId} - the store Id of the preview request</li>
|
||||||
|
* <li>{pathToAsset} - the full path and filename of the asset being previewed (including a leading '/')</li>
|
||||||
|
* </ul>
|
||||||
|
*
|
||||||
|
* @author Peter Monks, janv
|
||||||
|
*
|
||||||
|
* @since 3.2
|
||||||
|
*/
|
||||||
|
public class URITemplatePreviewURIService extends AbstractPreviewURIServiceProvider
|
||||||
|
{
|
||||||
|
private final static String URI_TEMPLATE_PARAMETER_STORE_ID = "{storeId}";
|
||||||
|
private final static String URI_TEMPLATE_PARAMETER_PATH_TO_ASSET = "{pathToAsset}";
|
||||||
|
|
||||||
|
protected String uriTemplate;
|
||||||
|
|
||||||
|
public void setUriTemplate(String uriTemplate)
|
||||||
|
{
|
||||||
|
this.uriTemplate = uriTemplate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public URITemplatePreviewURIService()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.alfresco.wcm.preview.PreviewURIServiceProvider#getPreviewURI(java.lang.String, java.lang.String, org.alfresco.wcm.preview.PreviewContext)
|
||||||
|
*/
|
||||||
|
public String getPreviewURI(final String storeId, final String pathToAsset, final PreviewContext ignored)
|
||||||
|
{
|
||||||
|
String result = uriTemplate;
|
||||||
|
|
||||||
|
if (uriTemplate.contains(URI_TEMPLATE_PARAMETER_STORE_ID))
|
||||||
|
{
|
||||||
|
if (storeId != null && storeId.trim().length() > 0)
|
||||||
|
{
|
||||||
|
result = result.replace(URI_TEMPLATE_PARAMETER_STORE_ID, storeId);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Shouldn't ever happen (store ids are always provided), but better to be safe than sorry
|
||||||
|
result = result.replace(URI_TEMPLATE_PARAMETER_STORE_ID, "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (uriTemplate.contains(URI_TEMPLATE_PARAMETER_PATH_TO_ASSET))
|
||||||
|
{
|
||||||
|
if (pathToAsset != null && pathToAsset.trim().length() > 0)
|
||||||
|
{
|
||||||
|
result = result.replace(URI_TEMPLATE_PARAMETER_PATH_TO_ASSET, pathToAsset);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = result.replace(URI_TEMPLATE_PARAMETER_PATH_TO_ASSET, "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,156 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2005-2009 Alfresco Software Limited.
|
||||||
|
*
|
||||||
|
* This program 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 program 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
* As a special exception to the terms and conditions of version 2.0 of
|
||||||
|
* the GPL, you may redistribute this Program in connection with Free/Libre
|
||||||
|
* and Open Source Software ("FLOSS") applications as described in Alfresco's
|
||||||
|
* FLOSS exception. You should have received a copy of the text describing
|
||||||
|
* the FLOSS exception, and it is also available here:
|
||||||
|
* http://www.alfresco.com/legal/licensing"
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.alfresco.wcm.preview;
|
||||||
|
|
||||||
|
import java.text.MessageFormat;
|
||||||
|
|
||||||
|
import org.alfresco.config.JNDIConstants;
|
||||||
|
import org.alfresco.mbeans.VirtServerRegistry;
|
||||||
|
import org.alfresco.service.cmr.avm.AVMService;
|
||||||
|
import org.alfresco.util.ParameterCheck;
|
||||||
|
import org.alfresco.wcm.util.WCMUtil;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A PreviewURIService that constructs a virtualisation server URI.
|
||||||
|
*
|
||||||
|
* @author Peter Monks, janv
|
||||||
|
*
|
||||||
|
* @since 3.2
|
||||||
|
*/
|
||||||
|
public class VirtualisationServerPreviewURIService extends AbstractPreviewURIServiceProvider
|
||||||
|
{
|
||||||
|
// TODO - remove deprecated constants from JNDIConstants
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default virtualization server IP address
|
||||||
|
*/
|
||||||
|
public final static String DEFAULT_VSERVER_IP = "127-0-0-1.ip.alfrescodemo.net";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default virtualization server port number
|
||||||
|
*/
|
||||||
|
public final static int DEFAULT_VSERVER_PORT = 8180;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Virtualization server sandbox URL pattern
|
||||||
|
*/
|
||||||
|
public final static String PREVIEW_SANDBOX_URL = "http://{0}.www--sandbox.{1}:{2}";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Virtualization server asset URL pattern
|
||||||
|
*/
|
||||||
|
public final static String PREVIEW_ASSET_URL = "http://{0}.www--sandbox.{1}:{2}{3}";
|
||||||
|
|
||||||
|
|
||||||
|
private AVMService avmService;
|
||||||
|
private VirtServerRegistry virtSvrRegistry;
|
||||||
|
|
||||||
|
public void setAvmService(AVMService avmService)
|
||||||
|
{
|
||||||
|
this.avmService = avmService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setVirtServerRegistry(VirtServerRegistry virtSvrRegistry)
|
||||||
|
{
|
||||||
|
this.virtSvrRegistry = virtSvrRegistry;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.alfresco.wcm.preview.PreviewURIServiceProvider#getPreviewURI(java.lang.String, java.lang.String, org.alfresco.wcm.preview.PreviewContext)
|
||||||
|
*/
|
||||||
|
public String getPreviewURI(String sbStoreId, String pathToAsset, PreviewContext ignored)
|
||||||
|
{
|
||||||
|
ParameterCheck.mandatoryString("sbStoreId", sbStoreId);
|
||||||
|
|
||||||
|
if ((pathToAsset == null) || (pathToAsset.length() == 0))
|
||||||
|
{
|
||||||
|
return buildPreviewStoreUrl(sbStoreId, getVServerDomain(), getVServerPort(), WCMUtil.lookupStoreDNS(avmService, sbStoreId));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sanity checking
|
||||||
|
if (!pathToAsset.startsWith('/' + JNDIConstants.DIR_DEFAULT_WWW + '/' + JNDIConstants.DIR_DEFAULT_APPBASE))
|
||||||
|
{
|
||||||
|
throw new IllegalStateException("Invalid asset path in AVM node ref: " + sbStoreId + ":" + pathToAsset);
|
||||||
|
}
|
||||||
|
|
||||||
|
return buildPreviewAssetUrl(pathToAsset, getVServerDomain(), getVServerPort(), WCMUtil.lookupStoreDNS(avmService, sbStoreId));
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildPreviewStoreUrl(String sbStoreId, String domain, String port, String dns)
|
||||||
|
{
|
||||||
|
return MessageFormat.format(PREVIEW_SANDBOX_URL, dns, domain, port);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String buildPreviewAssetUrl(String assetPath, String domain, String port, String dns)
|
||||||
|
{
|
||||||
|
ParameterCheck.mandatoryString("assetPath", assetPath);
|
||||||
|
|
||||||
|
if (domain == null || port == null || dns == null)
|
||||||
|
{
|
||||||
|
throw new IllegalArgumentException("Domain, port and dns name are mandatory.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (assetPath.startsWith(JNDIConstants.DIR_DEFAULT_WWW_APPBASE))
|
||||||
|
{
|
||||||
|
assetPath = assetPath.substring((JNDIConstants.DIR_DEFAULT_WWW_APPBASE).length());
|
||||||
|
}
|
||||||
|
if (assetPath.startsWith(WCMUtil.PATH_SEPARATOR + WCMUtil.DIR_ROOT))
|
||||||
|
{
|
||||||
|
assetPath = assetPath.substring((WCMUtil.PATH_SEPARATOR + WCMUtil.DIR_ROOT).length());
|
||||||
|
}
|
||||||
|
|
||||||
|
assetPath = WCMUtil.addLeadingSlash(assetPath);
|
||||||
|
|
||||||
|
return MessageFormat.format(PREVIEW_ASSET_URL, dns, domain, port, assetPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return VServer Port
|
||||||
|
*/
|
||||||
|
private String getVServerPort()
|
||||||
|
{
|
||||||
|
Integer port = (virtSvrRegistry != null ? virtSvrRegistry.getVirtServerHttpPort() : null);
|
||||||
|
if (port == null)
|
||||||
|
{
|
||||||
|
port = DEFAULT_VSERVER_PORT;
|
||||||
|
}
|
||||||
|
return port.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return VServer Domain
|
||||||
|
*/
|
||||||
|
private String getVServerDomain()
|
||||||
|
{
|
||||||
|
String domain = (virtSvrRegistry != null ? virtSvrRegistry.getVirtServerFQDN() : null);
|
||||||
|
if (domain == null)
|
||||||
|
{
|
||||||
|
domain = DEFAULT_VSERVER_IP;
|
||||||
|
}
|
||||||
|
return domain;
|
||||||
|
}
|
||||||
|
}
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2005-2008 Alfresco Software Limited.
|
* Copyright (C) 2005-2009 Alfresco Software Limited.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
@@ -56,6 +56,7 @@ public class SandboxConstants
|
|||||||
public final static QName PROP_WEBSITE_NAME = QName.createQName(null, ".website.name");
|
public final static QName PROP_WEBSITE_NAME = QName.createQName(null, ".website.name");
|
||||||
public final static QName PROP_AUTHOR_NAME = QName.createQName(null, ".author.name");
|
public final static QName PROP_AUTHOR_NAME = QName.createQName(null, ".author.name");
|
||||||
public final static QName PROP_WEB_PROJECT_NODE_REF = QName.createQName(null, ".web_project.noderef");
|
public final static QName PROP_WEB_PROJECT_NODE_REF = QName.createQName(null, ".web_project.noderef");
|
||||||
|
public final static QName PROP_WEB_PROJECT_PREVIEW_PROVIDER = QName.createQName(null, ".web_project.previewprovider");
|
||||||
|
|
||||||
public final static QName PROP_LINK_VALIDATION_REPORT = QName.createQName(null, ".link.validation.report");
|
public final static QName PROP_LINK_VALIDATION_REPORT = QName.createQName(null, ".link.validation.report");
|
||||||
public final static QName PROP_LAST_DEPLOYMENT_ID = QName.createQName(null, ".deployment.id");
|
public final static QName PROP_LAST_DEPLOYMENT_ID = QName.createQName(null, ".deployment.id");
|
||||||
|
@@ -466,8 +466,8 @@ public class SandboxServiceImpl implements SandboxService
|
|||||||
getSandbox(srcSandboxStoreId); // ignore result
|
getSandbox(srcSandboxStoreId); // ignore result
|
||||||
getSandbox(dstSandboxStoreId); // ignore result
|
getSandbox(dstSandboxStoreId); // ignore result
|
||||||
|
|
||||||
String avmSrcPath = srcSandboxStoreId + WCMUtil.AVM_STORE_SEPARATOR + srcRelativePath;
|
String avmSrcPath = WCMUtil.buildPath(srcSandboxStoreId, srcRelativePath);
|
||||||
String avmDstPath = dstSandboxStoreId + WCMUtil.AVM_STORE_SEPARATOR + dstRelativePath;
|
String avmDstPath = WCMUtil.buildPath(dstSandboxStoreId, dstRelativePath);
|
||||||
|
|
||||||
return listChanged(-1, avmSrcPath, -1, avmDstPath, includeDeleted);
|
return listChanged(-1, avmSrcPath, -1, avmDstPath, includeDeleted);
|
||||||
}
|
}
|
||||||
@@ -635,33 +635,12 @@ public class SandboxServiceImpl implements SandboxService
|
|||||||
RetryingTransactionHelper txnHelper = transactionService.getRetryingTransactionHelper();
|
RetryingTransactionHelper txnHelper = transactionService.getRetryingTransactionHelper();
|
||||||
|
|
||||||
final List<String> srcPaths = new ArrayList<String>(relativePaths.size());
|
final List<String> srcPaths = new ArrayList<String>(relativePaths.size());
|
||||||
|
|
||||||
String derivedWebApp = null;
|
|
||||||
boolean multiWebAppsFound = false;
|
|
||||||
|
|
||||||
for (String relativePath : relativePaths)
|
for (String relativePath : relativePaths)
|
||||||
{
|
{
|
||||||
// Example srcPath:
|
srcPaths.add(WCMUtil.buildPath(sbStoreId, relativePath));
|
||||||
// mysite--alice:/www/avm_webapps/ROOT/foo.txt
|
|
||||||
String srcPath = sbStoreId + WCMUtil.AVM_STORE_SEPARATOR + relativePath;
|
|
||||||
srcPaths.add(srcPath);
|
|
||||||
|
|
||||||
// derive webapp for now (TODO check usage)
|
|
||||||
String srcWebApp = WCMUtil.getWebapp(srcPath);
|
|
||||||
if (srcWebApp != null)
|
|
||||||
{
|
|
||||||
if (derivedWebApp == null)
|
|
||||||
{
|
|
||||||
derivedWebApp = srcWebApp;
|
|
||||||
}
|
|
||||||
else if (! derivedWebApp.equals(srcWebApp))
|
|
||||||
{
|
|
||||||
multiWebAppsFound = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
final String webApp = (multiWebAppsFound == false ? derivedWebApp : null);
|
final String webApp = WCMUtil.getCommonWebApp(sbStoreId, relativePaths);
|
||||||
|
|
||||||
RetryingTransactionCallback<Pair<SandboxInfo, String>> sandboxCallback = new RetryingTransactionCallback<Pair<SandboxInfo, String>>()
|
RetryingTransactionCallback<Pair<SandboxInfo, String>> sandboxCallback = new RetryingTransactionCallback<Pair<SandboxInfo, String>>()
|
||||||
{
|
{
|
||||||
|
@@ -24,7 +24,6 @@
|
|||||||
*/
|
*/
|
||||||
package org.alfresco.wcm.util;
|
package org.alfresco.wcm.util;
|
||||||
|
|
||||||
import java.text.MessageFormat;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -55,10 +54,7 @@ import org.apache.commons.logging.LogFactory;
|
|||||||
/**
|
/**
|
||||||
* Helper methods and constants related to WCM directories, paths and store name manipulation.
|
* Helper methods and constants related to WCM directories, paths and store name manipulation.
|
||||||
*
|
*
|
||||||
* TODO refactor ...
|
* @author Ariel Backenroth, Kevin Roast, janv
|
||||||
*
|
|
||||||
* @author Ariel Backenroth
|
|
||||||
* @author Kevin Roast
|
|
||||||
*/
|
*/
|
||||||
public class WCMUtil
|
public class WCMUtil
|
||||||
{
|
{
|
||||||
@@ -425,60 +421,6 @@ public class WCMUtil
|
|||||||
return WCMUtil.buildSandboxRootPath(storeName) + '/' + webApp;
|
return WCMUtil.buildSandboxRootPath(storeName) + '/' + webApp;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String buildStoreUrl(AVMService avmService, String storeName, String domain, String port)
|
|
||||||
{
|
|
||||||
ParameterCheck.mandatoryString("storeName", storeName);
|
|
||||||
|
|
||||||
if (domain == null || port == null)
|
|
||||||
{
|
|
||||||
throw new IllegalArgumentException("Domain and port are mandatory.");
|
|
||||||
}
|
|
||||||
|
|
||||||
// NOTE: for backwards compatibility - avmPath is converted to storeName (path is ignored)
|
|
||||||
if (storeName.indexOf(AVM_STORE_SEPARATOR) != -1)
|
|
||||||
{
|
|
||||||
storeName = storeName.substring(0, storeName.indexOf(AVM_STORE_SEPARATOR));
|
|
||||||
}
|
|
||||||
|
|
||||||
return MessageFormat.format(JNDIConstants.PREVIEW_SANDBOX_URL,
|
|
||||||
lookupStoreDNS(avmService, storeName),
|
|
||||||
domain,
|
|
||||||
port);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected static String buildWebappUrl(AVMService avmService, final String storeName, final String webApp, String domain, String port)
|
|
||||||
{
|
|
||||||
ParameterCheck.mandatoryString("webApp", webApp);
|
|
||||||
return (webApp.equals(DIR_ROOT)
|
|
||||||
? buildStoreUrl(avmService, storeName, domain, port)
|
|
||||||
: buildStoreUrl(avmService, storeName, domain, port) + '/' + webApp);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String buildAssetUrl(String assetPath, String domain, String port, String dns)
|
|
||||||
{
|
|
||||||
ParameterCheck.mandatoryString("assetPath", assetPath);
|
|
||||||
|
|
||||||
if (domain == null || port == null || dns == null)
|
|
||||||
{
|
|
||||||
throw new IllegalArgumentException("Domain, port and dns name are mandatory.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (assetPath.startsWith(JNDIConstants.DIR_DEFAULT_WWW_APPBASE))
|
|
||||||
{
|
|
||||||
assetPath = assetPath.substring((JNDIConstants.DIR_DEFAULT_WWW_APPBASE).length());
|
|
||||||
}
|
|
||||||
if (assetPath.startsWith('/' + DIR_ROOT))
|
|
||||||
{
|
|
||||||
assetPath = assetPath.substring(('/' + DIR_ROOT).length());
|
|
||||||
}
|
|
||||||
if (assetPath.length() == 0 || assetPath.charAt(0) != '/')
|
|
||||||
{
|
|
||||||
assetPath = '/' + assetPath;
|
|
||||||
}
|
|
||||||
|
|
||||||
return MessageFormat.format(JNDIConstants.PREVIEW_ASSET_URL, dns, domain, port, assetPath);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String lookupStoreDNS(AVMService avmService, String store)
|
public static String lookupStoreDNS(AVMService avmService, String store)
|
||||||
{
|
{
|
||||||
ParameterCheck.mandatoryString("store", store);
|
ParameterCheck.mandatoryString("store", store);
|
||||||
@@ -761,11 +703,59 @@ public class WCMUtil
|
|||||||
return storePath;
|
return storePath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String buildPath(String sbStoreId, String relativePath)
|
||||||
|
{
|
||||||
|
return sbStoreId + AVM_STORE_SEPARATOR + addLeadingSlash(relativePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String addLeadingSlash(String relativePath)
|
||||||
|
{
|
||||||
|
if ((relativePath.length() == 0) || (relativePath.charAt(0) != PATH_SEPARATOR))
|
||||||
|
{
|
||||||
|
relativePath = PATH_SEPARATOR + relativePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
return relativePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
// return common web app or null if paths span multiple web apps (or no web app)
|
||||||
|
public static String getCommonWebApp(String sbStoreId, List<String> storeRelativePaths)
|
||||||
|
{
|
||||||
|
String derivedWebApp = null;
|
||||||
|
boolean multiWebAppsFound = false;
|
||||||
|
|
||||||
|
for (String storeRelativePath : storeRelativePaths)
|
||||||
|
{
|
||||||
|
// Example srcPath:
|
||||||
|
// mysite--alice:/www/avm_webapps/ROOT/foo.txt
|
||||||
|
String srcPath = WCMUtil.buildPath(sbStoreId, storeRelativePath);
|
||||||
|
|
||||||
|
// TODO - don't really need the sbStoreId
|
||||||
|
// derive webapp for now
|
||||||
|
String srcWebApp = WCMUtil.getWebapp(srcPath);
|
||||||
|
if (srcWebApp != null)
|
||||||
|
{
|
||||||
|
if (derivedWebApp == null)
|
||||||
|
{
|
||||||
|
derivedWebApp = srcWebApp;
|
||||||
|
}
|
||||||
|
else if (! derivedWebApp.equals(srcWebApp))
|
||||||
|
{
|
||||||
|
multiWebAppsFound = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (multiWebAppsFound == false ? derivedWebApp : null);
|
||||||
|
}
|
||||||
|
|
||||||
// Component Separator.
|
// Component Separator.
|
||||||
protected static final String STORE_SEPARATOR = "--";
|
protected static final String STORE_SEPARATOR = "--";
|
||||||
|
|
||||||
public static final String AVM_STORE_SEPARATOR = ":";
|
public static final String AVM_STORE_SEPARATOR = ":";
|
||||||
|
|
||||||
|
public static final char PATH_SEPARATOR = '/';
|
||||||
|
|
||||||
// names of the stores representing the layers for an AVM website
|
// names of the stores representing the layers for an AVM website
|
||||||
//XXXarielb this should be private
|
//XXXarielb this should be private
|
||||||
protected final static String STORE_WORKFLOW = "workflow";
|
protected final static String STORE_WORKFLOW = "workflow";
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2005-2008 Alfresco Software Limited.
|
* Copyright (C) 2005-2009 Alfresco Software Limited.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
@@ -119,4 +119,23 @@ public interface WebProjectInfo
|
|||||||
* @param isTemplate set to <tt>true</tt> if this web project can also be used as a template
|
* @param isTemplate set to <tt>true</tt> if this web project can also be used as a template
|
||||||
*/
|
*/
|
||||||
public void setIsTemplate(boolean isTemplate);
|
public void setIsTemplate(boolean isTemplate);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the preview URI service provider name
|
||||||
|
*
|
||||||
|
* @since 3.2
|
||||||
|
*
|
||||||
|
* @return the preview URI service provider name
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public String getPreviewProviderName();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the preview URI service provider name
|
||||||
|
*
|
||||||
|
* @since 3.2
|
||||||
|
*
|
||||||
|
* @param previewURIServiceProviderName the preview URI service provider name to set
|
||||||
|
*/
|
||||||
|
public void setPreviewProviderName(String previewURIServiceProviderName);
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2005-2008 Alfresco Software Limited.
|
* Copyright (C) 2005-2009 Alfresco Software Limited.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
@@ -55,23 +55,29 @@ public class WebProjectInfoImpl implements WebProjectInfo
|
|||||||
/** Web Project true if the web project can also be used as template */
|
/** Web Project true if the web project can also be used as template */
|
||||||
private boolean isTemplate;
|
private boolean isTemplate;
|
||||||
|
|
||||||
|
/** Web Project preview provider name (if null then default preview provider will be used) */
|
||||||
|
private String previewURIServiceProviderName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
*
|
|
||||||
* @param name name
|
|
||||||
* @param description description
|
|
||||||
* @param nodeRef web project node reference
|
|
||||||
*/
|
*/
|
||||||
/*package*/ WebProjectInfoImpl(String name, String title, String description, String wpStoreId, String defaultWebApp, boolean isTemplate, NodeRef nodeRef)
|
public WebProjectInfoImpl(String wpStoreId,
|
||||||
|
String name,
|
||||||
|
String title,
|
||||||
|
String description,
|
||||||
|
String defaultWebApp,
|
||||||
|
boolean isTemplate,
|
||||||
|
NodeRef nodeRef,
|
||||||
|
String previewProvider)
|
||||||
{
|
{
|
||||||
|
this.wpStoreId = wpStoreId;
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.title = title;
|
this.title = title;
|
||||||
this.description = description;
|
this.description = description;
|
||||||
this.wpStoreId = wpStoreId;
|
|
||||||
this.defaultWebApp = defaultWebApp;
|
this.defaultWebApp = defaultWebApp;
|
||||||
this.isTemplate = isTemplate;
|
this.isTemplate = isTemplate;
|
||||||
this.nodeRef = nodeRef;
|
this.nodeRef = nodeRef;
|
||||||
|
this.previewURIServiceProviderName = previewProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -187,4 +193,14 @@ public class WebProjectInfoImpl implements WebProjectInfo
|
|||||||
{
|
{
|
||||||
this.isTemplate = isTemplate;
|
this.isTemplate = isTemplate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getPreviewProviderName()
|
||||||
|
{
|
||||||
|
return previewURIServiceProviderName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPreviewProviderName(String previewURIServiceProviderName)
|
||||||
|
{
|
||||||
|
this.previewURIServiceProviderName = previewURIServiceProviderName;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,3 +1,27 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2005-2009 Alfresco Software Limited.
|
||||||
|
*
|
||||||
|
* This program 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 program 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 Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
* As a special exception to the terms and conditions of version 2.0 of
|
||||||
|
* the GPL, you may redistribute this Program in connection with Free/Libre
|
||||||
|
* and Open Source Software ("FLOSS") applications as described in Alfresco's
|
||||||
|
* FLOSS exception. You should have recieved a copy of the text describing
|
||||||
|
* the FLOSS exception, and it is also available here:
|
||||||
|
* http://www.alfresco.com/legal/licensing"
|
||||||
|
*/
|
||||||
package org.alfresco.wcm.webproject;
|
package org.alfresco.wcm.webproject;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -25,7 +49,7 @@ public interface WebProjectService
|
|||||||
* Note: the DNS name will be used to generate the web project store id, which can be subsequently retrieved via WebProjectInfo.getStoreId()
|
* Note: the DNS name will be used to generate the web project store id, which can be subsequently retrieved via WebProjectInfo.getStoreId()
|
||||||
*
|
*
|
||||||
* @param dnsName DNS name (required, must be unique)
|
* @param dnsName DNS name (required, must be unique)
|
||||||
* @param name name (require, must be unique)
|
* @param name name (required, must be unique)
|
||||||
* @param title title
|
* @param title title
|
||||||
* @param description description
|
* @param description description
|
||||||
* @return WebProjectInfo the created web project info
|
* @return WebProjectInfo the created web project info
|
||||||
@@ -43,6 +67,8 @@ public interface WebProjectService
|
|||||||
* @param description description
|
* @param description description
|
||||||
* @param sourceNodeRef web project node ref to branch from (can be null)
|
* @param sourceNodeRef web project node ref to branch from (can be null)
|
||||||
* @return WebProjectInfo the created web project info
|
* @return WebProjectInfo the created web project info
|
||||||
|
*
|
||||||
|
* @deprecated see createWebProject(String dnsName, WebProjectInfo wpInfo)
|
||||||
*/
|
*/
|
||||||
public WebProjectInfo createWebProject(String dnsName, String name, String title, String description, NodeRef sourceNodeRef);
|
public WebProjectInfo createWebProject(String dnsName, String name, String title, String description, NodeRef sourceNodeRef);
|
||||||
|
|
||||||
@@ -51,8 +77,8 @@ public interface WebProjectService
|
|||||||
* <p>
|
* <p>
|
||||||
* Note: the DNS name will be used to generate the web project store id, which can be subsequently retrieved via WebProjectInfo.getStoreId()
|
* Note: the DNS name will be used to generate the web project store id, which can be subsequently retrieved via WebProjectInfo.getStoreId()
|
||||||
*
|
*
|
||||||
* @param dnsName DNS name (must be unique)
|
* @param dnsName DNS name (required, must be unique)
|
||||||
* @param name name (must be unique)
|
* @param name name (required, must be unique)
|
||||||
* @param title title
|
* @param title title
|
||||||
* @param description description
|
* @param description description
|
||||||
* @param defaultWebApp default webapp (if null, will default to ROOT webapp)
|
* @param defaultWebApp default webapp (if null, will default to ROOT webapp)
|
||||||
@@ -62,6 +88,28 @@ public interface WebProjectService
|
|||||||
*/
|
*/
|
||||||
public WebProjectInfo createWebProject(String dnsName, String name, String title, String description, String defaultWebApp, boolean useAsTemplate, NodeRef sourceNodeRef);
|
public WebProjectInfo createWebProject(String dnsName, String name, String title, String description, String defaultWebApp, boolean useAsTemplate, NodeRef sourceNodeRef);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new web project (with given web project info)
|
||||||
|
* <p>
|
||||||
|
* Note: the DNS name will be used to generate the web project store id, which can be subsequently retrieved via WebProjectInfo.getStoreId()
|
||||||
|
*
|
||||||
|
* @param wpInfo web project info
|
||||||
|
*
|
||||||
|
* Note:
|
||||||
|
*
|
||||||
|
* @param dnsName DNS name (required, must be unique)
|
||||||
|
* @param name name (required, must be unique)
|
||||||
|
* @param title title
|
||||||
|
* @param description description
|
||||||
|
* @param defaultWebApp default webapp (if null, will default to ROOT webapp)
|
||||||
|
* @param useAsTemplate <tt>true</tt> if this web project can be used as a template to branch from
|
||||||
|
* @param sourceNodeRef web project node ref to branch from (can be null)
|
||||||
|
* @param previewProvider preview URI service provider name (must correspond to registered name, if null will be set to default provider)
|
||||||
|
*
|
||||||
|
* @return WebProjectInfo the created web project info
|
||||||
|
*/
|
||||||
|
public WebProjectInfo createWebProject(WebProjectInfo wpInfo);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the Web Projects container
|
* Returns the Web Projects container
|
||||||
*
|
*
|
||||||
@@ -136,6 +184,13 @@ public interface WebProjectService
|
|||||||
*/
|
*/
|
||||||
public WebProjectInfo getWebProject(NodeRef wpNodeRef);
|
public WebProjectInfo getWebProject(NodeRef wpNodeRef);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get preview provider name configured for given web project (if not configured then return default preview provider)
|
||||||
|
* @param wpStoreId web project store id
|
||||||
|
* @return previewProviderName preview URI service provide name
|
||||||
|
*/
|
||||||
|
public String getPreviewProvider(String wpStoreId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update the web project info
|
* Update the web project info
|
||||||
* <p>
|
* <p>
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2005-2008 Alfresco Software Limited.
|
* Copyright (C) 2005-2009 Alfresco Software Limited.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
@@ -47,6 +47,7 @@ import org.alfresco.repo.security.permissions.AccessDeniedException;
|
|||||||
import org.alfresco.repo.transaction.AlfrescoTransactionSupport;
|
import org.alfresco.repo.transaction.AlfrescoTransactionSupport;
|
||||||
import org.alfresco.repo.transaction.TransactionListenerAdapter;
|
import org.alfresco.repo.transaction.TransactionListenerAdapter;
|
||||||
import org.alfresco.service.cmr.avm.AVMNodeDescriptor;
|
import org.alfresco.service.cmr.avm.AVMNodeDescriptor;
|
||||||
|
import org.alfresco.service.cmr.avm.AVMNotFoundException;
|
||||||
import org.alfresco.service.cmr.avm.AVMService;
|
import org.alfresco.service.cmr.avm.AVMService;
|
||||||
import org.alfresco.service.cmr.avm.locking.AVMLockingService;
|
import org.alfresco.service.cmr.avm.locking.AVMLockingService;
|
||||||
import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
|
import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
|
||||||
@@ -67,6 +68,8 @@ import org.alfresco.service.namespace.QName;
|
|||||||
import org.alfresco.service.namespace.RegexQNamePattern;
|
import org.alfresco.service.namespace.RegexQNamePattern;
|
||||||
import org.alfresco.util.DNSNameMangler;
|
import org.alfresco.util.DNSNameMangler;
|
||||||
import org.alfresco.util.ParameterCheck;
|
import org.alfresco.util.ParameterCheck;
|
||||||
|
import org.alfresco.wcm.preview.PreviewURIServiceRegistry;
|
||||||
|
import org.alfresco.wcm.sandbox.SandboxConstants;
|
||||||
import org.alfresco.wcm.sandbox.SandboxFactory;
|
import org.alfresco.wcm.sandbox.SandboxFactory;
|
||||||
import org.alfresco.wcm.sandbox.SandboxInfo;
|
import org.alfresco.wcm.sandbox.SandboxInfo;
|
||||||
import org.alfresco.wcm.sandbox.SandboxFactory.UserRoleWrapper;
|
import org.alfresco.wcm.sandbox.SandboxFactory.UserRoleWrapper;
|
||||||
@@ -101,6 +104,7 @@ public class WebProjectServiceImpl extends WCMUtil implements WebProjectService
|
|||||||
|
|
||||||
private SandboxFactory sandboxFactory;
|
private SandboxFactory sandboxFactory;
|
||||||
private VirtServerRegistry virtServerRegistry;
|
private VirtServerRegistry virtServerRegistry;
|
||||||
|
private PreviewURIServiceRegistry previewURIProviderRegistry;
|
||||||
|
|
||||||
public void setNodeService(NodeService nodeService)
|
public void setNodeService(NodeService nodeService)
|
||||||
{
|
{
|
||||||
@@ -147,6 +151,10 @@ public class WebProjectServiceImpl extends WCMUtil implements WebProjectService
|
|||||||
this.virtServerRegistry = virtServerRegistry;
|
this.virtServerRegistry = virtServerRegistry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setPreviewURIServiceRegistry(PreviewURIServiceRegistry previewURIProviderRegistry)
|
||||||
|
{
|
||||||
|
this.previewURIProviderRegistry = previewURIProviderRegistry;
|
||||||
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.alfresco.wcm.WebProjectService#createWebProject(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
|
* @see org.alfresco.wcm.WebProjectService#createWebProject(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
|
||||||
@@ -169,8 +177,25 @@ public class WebProjectServiceImpl extends WCMUtil implements WebProjectService
|
|||||||
*/
|
*/
|
||||||
public WebProjectInfo createWebProject(String dnsName, String name, String title, String description, String defaultWebApp, boolean useAsTemplate, NodeRef sourceNodeRef)
|
public WebProjectInfo createWebProject(String dnsName, String name, String title, String description, String defaultWebApp, boolean useAsTemplate, NodeRef sourceNodeRef)
|
||||||
{
|
{
|
||||||
|
return createWebProject(new WebProjectInfoImpl(dnsName, name, title, description, defaultWebApp, useAsTemplate, sourceNodeRef, null));
|
||||||
|
}
|
||||||
|
|
||||||
|
public WebProjectInfo createWebProject(WebProjectInfo wpInfo)
|
||||||
|
{
|
||||||
|
String wpStoreId = wpInfo.getStoreId();
|
||||||
|
String name = wpInfo.getName();
|
||||||
|
String title = wpInfo.getTitle();
|
||||||
|
String description = wpInfo.getDescription();
|
||||||
|
boolean useAsTemplate = wpInfo.isTemplate();
|
||||||
|
NodeRef sourceNodeRef = wpInfo.getNodeRef();
|
||||||
|
String defaultWebApp = wpInfo.getDefaultWebApp();
|
||||||
|
String previewProviderName = wpInfo.getPreviewProviderName();
|
||||||
|
|
||||||
|
ParameterCheck.mandatoryString("wpStoreId", wpStoreId);
|
||||||
|
ParameterCheck.mandatoryString("name", name);
|
||||||
|
|
||||||
// Generate web project store id (an AVM store name)
|
// Generate web project store id (an AVM store name)
|
||||||
String wpStoreId = DNSNameMangler.MakeDNSName(dnsName);
|
wpStoreId = DNSNameMangler.MakeDNSName(wpStoreId);
|
||||||
|
|
||||||
if (wpStoreId.indexOf(WCMUtil.STORE_SEPARATOR) != -1)
|
if (wpStoreId.indexOf(WCMUtil.STORE_SEPARATOR) != -1)
|
||||||
{
|
{
|
||||||
@@ -182,9 +207,26 @@ public class WebProjectServiceImpl extends WCMUtil implements WebProjectService
|
|||||||
throw new IllegalArgumentException("Unexpected store id '"+wpStoreId+"' - should not contain '"+WCMUtil.AVM_STORE_SEPARATOR+"'");
|
throw new IllegalArgumentException("Unexpected store id '"+wpStoreId+"' - should not contain '"+WCMUtil.AVM_STORE_SEPARATOR+"'");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (previewProviderName == null)
|
||||||
|
{
|
||||||
|
// default preview URI service provider
|
||||||
|
previewProviderName = previewURIProviderRegistry.getDefaultProviderName();
|
||||||
|
}
|
||||||
|
else if (! previewURIProviderRegistry.getPreviewURIServiceProviders().keySet().contains(previewProviderName))
|
||||||
|
{
|
||||||
|
throw new AlfrescoRuntimeException("Cannot update web project '" + wpInfo.getStoreId() + "' - unknown preview URI service provider ("+previewProviderName+")");
|
||||||
|
}
|
||||||
|
|
||||||
|
// default webapp name
|
||||||
|
defaultWebApp = (defaultWebApp != null && defaultWebApp.length() != 0) ? defaultWebApp : WCMUtil.DIR_ROOT;
|
||||||
|
|
||||||
// create the website space in the correct parent folder
|
// create the website space in the correct parent folder
|
||||||
Map<QName, Serializable> props = new HashMap<QName, Serializable>(1);
|
Map<QName, Serializable> props = new HashMap<QName, Serializable>(1);
|
||||||
props.put(ContentModel.PROP_NAME, name);
|
props.put(ContentModel.PROP_NAME, name);
|
||||||
|
props.put(WCMAppModel.PROP_ISSOURCE, useAsTemplate);
|
||||||
|
props.put(WCMAppModel.PROP_DEFAULTWEBAPP, defaultWebApp);
|
||||||
|
props.put(WCMAppModel.PROP_AVMSTORE, wpStoreId); // reference to the root AVM store
|
||||||
|
props.put(WCMAppModel.PROP_PREVIEW_PROVIDER, previewProviderName);
|
||||||
|
|
||||||
ChildAssociationRef childAssocRef = nodeService.createNode(
|
ChildAssociationRef childAssocRef = nodeService.createNode(
|
||||||
getWebProjectsRoot(),
|
getWebProjectsRoot(),
|
||||||
@@ -203,16 +245,6 @@ public class WebProjectServiceImpl extends WCMUtil implements WebProjectService
|
|||||||
uiFacetsProps.put(ContentModel.PROP_DESCRIPTION, description);
|
uiFacetsProps.put(ContentModel.PROP_DESCRIPTION, description);
|
||||||
nodeService.addAspect(wpNodeRef, ApplicationModel.ASPECT_UIFACETS, uiFacetsProps);
|
nodeService.addAspect(wpNodeRef, ApplicationModel.ASPECT_UIFACETS, uiFacetsProps);
|
||||||
|
|
||||||
// use as template source flag
|
|
||||||
nodeService.setProperty(wpNodeRef, WCMAppModel.PROP_ISSOURCE, useAsTemplate);
|
|
||||||
|
|
||||||
// set the default webapp name for the project
|
|
||||||
defaultWebApp = (defaultWebApp != null && defaultWebApp.length() != 0) ? defaultWebApp : WCMUtil.DIR_ROOT;
|
|
||||||
nodeService.setProperty(wpNodeRef, WCMAppModel.PROP_DEFAULTWEBAPP, defaultWebApp);
|
|
||||||
|
|
||||||
// set the property on the node to reference the root AVM store
|
|
||||||
nodeService.setProperty(wpNodeRef, WCMAppModel.PROP_AVMSTORE, wpStoreId);
|
|
||||||
|
|
||||||
// branch from source web project, if supplied
|
// branch from source web project, if supplied
|
||||||
String branchStoreId = null;
|
String branchStoreId = null;
|
||||||
if (sourceNodeRef != null)
|
if (sourceNodeRef != null)
|
||||||
@@ -223,10 +255,11 @@ public class WebProjectServiceImpl extends WCMUtil implements WebProjectService
|
|||||||
// create the AVM staging store to represent the newly created location website
|
// create the AVM staging store to represent the newly created location website
|
||||||
sandboxFactory.createStagingSandbox(wpStoreId, wpNodeRef, branchStoreId); // ignore return, fails if web project already exists
|
sandboxFactory.createStagingSandbox(wpStoreId, wpNodeRef, branchStoreId); // ignore return, fails if web project already exists
|
||||||
|
|
||||||
|
String stagingStore = WCMUtil.buildStagingStoreName(wpStoreId);
|
||||||
|
|
||||||
// create the default webapp folder under the hidden system folders
|
// create the default webapp folder under the hidden system folders
|
||||||
if (branchStoreId == null)
|
if (branchStoreId == null)
|
||||||
{
|
{
|
||||||
String stagingStore = WCMUtil.buildStagingStoreName(wpStoreId);
|
|
||||||
String stagingStoreRoot = WCMUtil.buildSandboxRootPath(stagingStore);
|
String stagingStoreRoot = WCMUtil.buildSandboxRootPath(stagingStore);
|
||||||
avmService.createDirectory(stagingStoreRoot, defaultWebApp);
|
avmService.createDirectory(stagingStoreRoot, defaultWebApp);
|
||||||
avmService.addAspect(AVMNodeConverter.ExtendAVMPath(stagingStoreRoot, defaultWebApp), WCMAppModel.ASPECT_WEBAPP);
|
avmService.addAspect(AVMNodeConverter.ExtendAVMPath(stagingStoreRoot, defaultWebApp), WCMAppModel.ASPECT_WEBAPP);
|
||||||
@@ -235,8 +268,10 @@ public class WebProjectServiceImpl extends WCMUtil implements WebProjectService
|
|||||||
// now the sandbox is created set the permissions masks for the store
|
// now the sandbox is created set the permissions masks for the store
|
||||||
sandboxFactory.setStagingPermissionMasks(wpStoreId);
|
sandboxFactory.setStagingPermissionMasks(wpStoreId);
|
||||||
|
|
||||||
// set the property on the node to reference the root AVM store
|
// set preview provider on staging store (used for preview lookup)
|
||||||
nodeService.setProperty(wpNodeRef, WCMAppModel.PROP_AVMSTORE, wpStoreId);
|
avmService.setStoreProperty(stagingStore,
|
||||||
|
SandboxConstants.PROP_WEB_PROJECT_PREVIEW_PROVIDER,
|
||||||
|
new PropertyValue(DataTypeDefinition.TEXT, previewProviderName));
|
||||||
|
|
||||||
// inform the locking service about this new instance
|
// inform the locking service about this new instance
|
||||||
avmLockingService.addWebProject(wpStoreId);
|
avmLockingService.addWebProject(wpStoreId);
|
||||||
@@ -261,8 +296,7 @@ public class WebProjectServiceImpl extends WCMUtil implements WebProjectService
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Return created web project info
|
// Return created web project info
|
||||||
WebProjectInfo wpInfo = new WebProjectInfoImpl(name, title, description, wpStoreId, defaultWebApp, useAsTemplate, wpNodeRef);
|
return new WebProjectInfoImpl(wpStoreId, name, title, description, defaultWebApp, useAsTemplate, wpNodeRef, previewProviderName);
|
||||||
return wpInfo;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
@@ -371,6 +405,8 @@ public class WebProjectServiceImpl extends WCMUtil implements WebProjectService
|
|||||||
// get AVM store name of the staging sandbox
|
// get AVM store name of the staging sandbox
|
||||||
final String wpStoreId = wpInfo.getStoreId();
|
final String wpStoreId = wpInfo.getStoreId();
|
||||||
|
|
||||||
|
WCMUtil.removeVServerWebapp(virtServerRegistry, WCMUtil.buildStoreWebappPath(wpStoreId, webAppName), true);
|
||||||
|
|
||||||
AuthenticationUtil.runAs(new RunAsWork<Object>()
|
AuthenticationUtil.runAs(new RunAsWork<Object>()
|
||||||
{
|
{
|
||||||
public Object doWork() throws Exception
|
public Object doWork() throws Exception
|
||||||
@@ -525,6 +561,38 @@ public class WebProjectServiceImpl extends WCMUtil implements WebProjectService
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.alfresco.wcm.webproject.WebProjectService#getPreviewProvider(java.lang.String)
|
||||||
|
*/
|
||||||
|
public String getPreviewProvider(String wpStoreId)
|
||||||
|
{
|
||||||
|
ParameterCheck.mandatoryString("wpStoreId", wpStoreId);
|
||||||
|
|
||||||
|
String previewProviderName = null;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
String stagingStoreId = WCMUtil.buildStagingStoreName(wpStoreId);
|
||||||
|
PropertyValue pValue = avmService.getStoreProperty(stagingStoreId, SandboxConstants.PROP_WEB_PROJECT_PREVIEW_PROVIDER);
|
||||||
|
|
||||||
|
if (pValue != null)
|
||||||
|
{
|
||||||
|
previewProviderName = (String)pValue.getValue(DataTypeDefinition.TEXT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (AVMNotFoundException nfe)
|
||||||
|
{
|
||||||
|
logger.warn(wpStoreId + " is not a web project: " + nfe);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (previewProviderName == null)
|
||||||
|
{
|
||||||
|
previewProviderName = previewURIProviderRegistry.getDefaultProviderName();
|
||||||
|
}
|
||||||
|
|
||||||
|
return previewProviderName;
|
||||||
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.alfresco.wcm.webproject.WebProjectService#getWebProject(org.alfresco.service.cmr.repository.NodeRef)
|
* @see org.alfresco.wcm.webproject.WebProjectService#getWebProject(org.alfresco.service.cmr.repository.NodeRef)
|
||||||
*/
|
*/
|
||||||
@@ -544,9 +612,10 @@ public class WebProjectServiceImpl extends WCMUtil implements WebProjectService
|
|||||||
String wpStoreId = (String)properties.get(WCMAppModel.PROP_AVMSTORE);
|
String wpStoreId = (String)properties.get(WCMAppModel.PROP_AVMSTORE);
|
||||||
String defaultWebApp = (String)properties.get(WCMAppModel.PROP_DEFAULTWEBAPP);
|
String defaultWebApp = (String)properties.get(WCMAppModel.PROP_DEFAULTWEBAPP);
|
||||||
Boolean useAsTemplate = (Boolean)properties.get(WCMAppModel.PROP_ISSOURCE);
|
Boolean useAsTemplate = (Boolean)properties.get(WCMAppModel.PROP_ISSOURCE);
|
||||||
|
String previewProvider = (String)properties.get(WCMAppModel.PROP_PREVIEW_PROVIDER);
|
||||||
|
|
||||||
// Create and return the web project info
|
// Create and return the web project info
|
||||||
WebProjectInfo wpInfo = new WebProjectInfoImpl(name, title, description, wpStoreId, defaultWebApp, useAsTemplate, wpNodeRef);
|
WebProjectInfo wpInfo = new WebProjectInfoImpl(wpStoreId, name, title, description, defaultWebApp, useAsTemplate, wpNodeRef, previewProvider);
|
||||||
return wpInfo;
|
return wpInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -558,7 +627,21 @@ public class WebProjectServiceImpl extends WCMUtil implements WebProjectService
|
|||||||
NodeRef wpNodeRef = getWebProjectNodeFromStore(wpInfo.getStoreId());
|
NodeRef wpNodeRef = getWebProjectNodeFromStore(wpInfo.getStoreId());
|
||||||
if (wpNodeRef == null)
|
if (wpNodeRef == null)
|
||||||
{
|
{
|
||||||
throw new AlfrescoRuntimeException("Cannot update web project '" + wpInfo.getStoreId() + "' because it does not exist.");
|
throw new AlfrescoRuntimeException("Cannot update web project '" + wpInfo.getStoreId() + "' - it does not exist.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! listWebApps(wpNodeRef).contains(wpInfo.getDefaultWebApp()))
|
||||||
|
{
|
||||||
|
throw new AlfrescoRuntimeException("Cannot update web project '" + wpInfo.getStoreId() + "' - unknown default web app ("+wpInfo.getDefaultWebApp()+")");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (wpInfo.getPreviewProviderName() == null)
|
||||||
|
{
|
||||||
|
wpInfo.setPreviewProviderName(previewURIProviderRegistry.getDefaultProviderName());
|
||||||
|
}
|
||||||
|
else if (! previewURIProviderRegistry.getPreviewURIServiceProviders().keySet().contains(wpInfo.getPreviewProviderName()))
|
||||||
|
{
|
||||||
|
throw new AlfrescoRuntimeException("Cannot update web project '" + wpInfo.getStoreId() + "' - unknown preview URI service provider ("+wpInfo.getPreviewProviderName()+")");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Note: the site preset and short name can not be updated
|
// Note: the site preset and short name can not be updated
|
||||||
@@ -571,9 +654,18 @@ public class WebProjectServiceImpl extends WCMUtil implements WebProjectService
|
|||||||
properties.put(ContentModel.PROP_DESCRIPTION, wpInfo.getDescription());
|
properties.put(ContentModel.PROP_DESCRIPTION, wpInfo.getDescription());
|
||||||
properties.put(WCMAppModel.PROP_DEFAULTWEBAPP, wpInfo.getDefaultWebApp());
|
properties.put(WCMAppModel.PROP_DEFAULTWEBAPP, wpInfo.getDefaultWebApp());
|
||||||
properties.put(WCMAppModel.PROP_ISSOURCE, wpInfo.isTemplate());
|
properties.put(WCMAppModel.PROP_ISSOURCE, wpInfo.isTemplate());
|
||||||
|
properties.put(WCMAppModel.PROP_PREVIEW_PROVIDER, wpInfo.getPreviewProviderName());
|
||||||
|
|
||||||
this.nodeService.setProperties(wpNodeRef, properties);
|
this.nodeService.setProperties(wpNodeRef, properties);
|
||||||
|
|
||||||
|
// set preview provider on staging store (used for preview lookup)
|
||||||
|
String stagingStore = WCMUtil.buildStagingStoreName(wpInfo.getStoreId());
|
||||||
|
|
||||||
|
avmService.deleteStoreProperty(stagingStore, SandboxConstants.PROP_WEB_PROJECT_PREVIEW_PROVIDER);
|
||||||
|
avmService.setStoreProperty(stagingStore,
|
||||||
|
SandboxConstants.PROP_WEB_PROJECT_PREVIEW_PROVIDER,
|
||||||
|
new PropertyValue(DataTypeDefinition.TEXT, wpInfo.getPreviewProviderName()));
|
||||||
|
|
||||||
if (logger.isDebugEnabled())
|
if (logger.isDebugEnabled())
|
||||||
{
|
{
|
||||||
logger.debug("Updated web project: " + wpNodeRef + " (store id: " + wpInfo.getStoreId() + ")");
|
logger.debug("Updated web project: " + wpNodeRef + " (store id: " + wpInfo.getStoreId() + ")");
|
||||||
|
@@ -457,7 +457,7 @@ public class WebProjectServiceImplTest extends AbstractWCMServiceImplTest
|
|||||||
|
|
||||||
public void testUpdateWebProject()
|
public void testUpdateWebProject()
|
||||||
{
|
{
|
||||||
WebProjectInfo wpInfo = new WebProjectInfoImpl(TEST_WEBPROJ_DNS+"-update", TEST_WEBPROJ_NAME+"-update", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, false, null);
|
WebProjectInfo wpInfo = new WebProjectInfoImpl(TEST_WEBPROJ_DNS+"-update", TEST_WEBPROJ_NAME+"-update", TEST_WEBPROJ_TITLE, TEST_WEBPROJ_DESCRIPTION, TEST_WEBPROJ_DEFAULT_WEBAPP, false, null, null);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
22
source/test-resources/wcm/wcm-test-preview-context.xml
Normal file
22
source/test-resources/wcm/wcm-test-preview-context.xml
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
|
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
|
||||||
|
|
||||||
|
<beans>
|
||||||
|
|
||||||
|
<bean id="previewURIServiceRegistry" class="org.alfresco.wcm.preview.PreviewURIServiceRegistryImpl">
|
||||||
|
<property name="defaultProviderName">
|
||||||
|
<value>Virtualisation Server Preview</value>
|
||||||
|
</property>
|
||||||
|
<property name="previewURIServiceProvidersByName">
|
||||||
|
<map>
|
||||||
|
<entry key="Virtualisation Server Preview">
|
||||||
|
<ref bean="virtServerPreviewURIService"/>
|
||||||
|
</entry>
|
||||||
|
<entry key="NOOP Preview">
|
||||||
|
<ref bean="nullPreviewURIService"/>
|
||||||
|
</entry>
|
||||||
|
</map>
|
||||||
|
</property>
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
</beans>
|
Reference in New Issue
Block a user