ccm-portalworkspace umgestellt auf legacy-free application type.
Damit entfallen Einträge in apm_package* und site_node samt den entsprechenden Klassen. Und weil es, nachdem verschiedene Probleme in core gefixt waren, so schön einfach ging, auch gleich themedirector umgestellt. In beiden Fällen update script erforderlich: ccm-portalworkspace 6.6.1-6.6.2 ccm-themedirector 6.6.1-6.6.2 Es müssen dann lediglich die jar-files ausgetauscht werden und das Basisverzeichnis für das fallback theme (in themes/heirloon/apps bzw. noch __ccm__/apps) in portal-workspace bzw. theme-director umbenannt werden. Der Großteil der Applicationen ließe sich jetzt mit ein paar Zeilen Codeänderung umstellen. git-svn-id: https://svn.libreccm.org/ccm/trunk@829 8810af33-2d31-482b-a856-94f89814c4dfmaster
parent
580e2d90fb
commit
8aca4315bd
|
|
@ -24,8 +24,12 @@ model com.arsdigita.web;
|
||||||
// @author Justin Ross (justin@arsdigita.com)
|
// @author Justin Ross (justin@arsdigita.com)
|
||||||
// @version $Id: WebApp.pdl 287 2005-02-22 00:29:02Z sskracic $
|
// @version $Id: WebApp.pdl 287 2005-02-22 00:29:02Z sskracic $
|
||||||
|
|
||||||
|
// Class WebApp seems to be quit unfinisched work and is commented out.
|
||||||
|
// So we need no table for it.
|
||||||
|
// We leave igt hefre vofr further reference.
|
||||||
|
// pboy April 2011
|
||||||
object type WebApp {
|
object type WebApp {
|
||||||
String[1..1] name = webapps.name VARCHAR(200);
|
// String[1..1] name = webapps.name VARCHAR(200);
|
||||||
|
|
||||||
object key (name);
|
// object key (name);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ import com.arsdigita.ui.sitemap.SiteMap;
|
||||||
import com.arsdigita.util.URLRewriter;
|
import com.arsdigita.util.URLRewriter;
|
||||||
import com.arsdigita.xml.FactoriesSetup;
|
import com.arsdigita.xml.FactoriesSetup;
|
||||||
import com.arsdigita.web.Host;
|
import com.arsdigita.web.Host;
|
||||||
import com.arsdigita.web.WebApp;
|
// import com.arsdigita.web.WebApp;
|
||||||
import com.arsdigita.web.ApplicationType;
|
import com.arsdigita.web.ApplicationType;
|
||||||
import com.arsdigita.workflow.simple.TaskComment;
|
import com.arsdigita.workflow.simple.TaskComment;
|
||||||
import com.arsdigita.search.converter.Converter;
|
import com.arsdigita.search.converter.Converter;
|
||||||
|
|
@ -94,8 +94,6 @@ public class Initializer extends CompoundInitializer {
|
||||||
add(new com.arsdigita.search.intermedia.Initializer());
|
add(new com.arsdigita.search.intermedia.Initializer());
|
||||||
add(new com.arsdigita.notification.Initializer());
|
add(new com.arsdigita.notification.Initializer());
|
||||||
|
|
||||||
// add(new LegacyInitializer("com/arsdigita/core/enterprise.init"));
|
|
||||||
// add(new OptionalLegacyInitializer("enterprise.init"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -126,6 +124,7 @@ public class Initializer extends CompoundInitializer {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/* Status Experimental - not used anywhere in code base.
|
||||||
e.getFactory().registerInstantiator
|
e.getFactory().registerInstantiator
|
||||||
(WebApp.BASE_DATA_OBJECT_TYPE,
|
(WebApp.BASE_DATA_OBJECT_TYPE,
|
||||||
new DomainObjectInstantiator() {
|
new DomainObjectInstantiator() {
|
||||||
|
|
@ -133,7 +132,7 @@ public class Initializer extends CompoundInitializer {
|
||||||
return new WebApp(data);
|
return new WebApp(data);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
*/
|
||||||
e.getFactory().registerInstantiator
|
e.getFactory().registerInstantiator
|
||||||
(TaskComment.BASE_DATA_OBJECT_TYPE,
|
(TaskComment.BASE_DATA_OBJECT_TYPE,
|
||||||
new DomainObjectInstantiator() {
|
new DomainObjectInstantiator() {
|
||||||
|
|
@ -145,6 +144,7 @@ public class Initializer extends CompoundInitializer {
|
||||||
e.getFactory().registerInstantiator
|
e.getFactory().registerInstantiator
|
||||||
(Admin.BASE_DATA_OBJECT_TYPE,
|
(Admin.BASE_DATA_OBJECT_TYPE,
|
||||||
new ACSObjectInstantiator() {
|
new ACSObjectInstantiator() {
|
||||||
|
@Override
|
||||||
public DomainObject doNewInstance(final DataObject data) {
|
public DomainObject doNewInstance(final DataObject data) {
|
||||||
return new Admin(data);
|
return new Admin(data);
|
||||||
}
|
}
|
||||||
|
|
@ -153,6 +153,7 @@ public class Initializer extends CompoundInitializer {
|
||||||
e.getFactory().registerInstantiator
|
e.getFactory().registerInstantiator
|
||||||
(SiteMap.BASE_DATA_OBJECT_TYPE,
|
(SiteMap.BASE_DATA_OBJECT_TYPE,
|
||||||
new ACSObjectInstantiator() {
|
new ACSObjectInstantiator() {
|
||||||
|
@Override
|
||||||
public DomainObject doNewInstance(final DataObject data) {
|
public DomainObject doNewInstance(final DataObject data) {
|
||||||
return new SiteMap(data);
|
return new SiteMap(data);
|
||||||
}
|
}
|
||||||
|
|
@ -192,6 +193,7 @@ public class Initializer extends CompoundInitializer {
|
||||||
public DomainObject doNewInstance(DataObject dataObject) {
|
public DomainObject doNewInstance(DataObject dataObject) {
|
||||||
return new MimeType(dataObject);
|
return new MimeType(dataObject);
|
||||||
}
|
}
|
||||||
|
@Override
|
||||||
public DomainObjectInstantiator
|
public DomainObjectInstantiator
|
||||||
resolveInstantiator(DataObject obj) {
|
resolveInstantiator(DataObject obj) {
|
||||||
return this;
|
return this;
|
||||||
|
|
|
||||||
|
|
@ -111,6 +111,7 @@ public class Resource extends ACSObject {
|
||||||
return resource;
|
return resource;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
protected void beforeSave() {
|
protected void beforeSave() {
|
||||||
if (isNew() || isPropertyModified("parentResource")) {
|
if (isNew() || isPropertyModified("parentResource")) {
|
||||||
m_parentModified = true;
|
m_parentModified = true;
|
||||||
|
|
@ -123,6 +124,7 @@ public class Resource extends ACSObject {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
protected void afterSave() {
|
protected void afterSave() {
|
||||||
super.afterSave();
|
super.afterSave();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,9 @@ public class ApplicationOIDPatternGenerator implements PatternGenerator {
|
||||||
|
|
||||||
public String[] generateValues(String key,
|
public String[] generateValues(String key,
|
||||||
HttpServletRequest req) {
|
HttpServletRequest req) {
|
||||||
Application application = Web.getContext().getApplication();
|
|
||||||
|
final Application application = Web.getContext().getApplication();
|
||||||
|
|
||||||
if (application != null) {
|
if (application != null) {
|
||||||
String[] oid = new String[1];
|
String[] oid = new String[1];
|
||||||
// FR: better URLEncode this
|
// FR: better URLEncode this
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,8 @@ import com.arsdigita.web.Application;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
|
import org.apache.log4j.Logger;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -35,16 +37,34 @@ import javax.servlet.http.HttpServletRequest;
|
||||||
* key, eg content-center, content-section.
|
* key, eg content-center, content-section.
|
||||||
*/
|
*/
|
||||||
public class ApplicationPatternGenerator implements PatternGenerator {
|
public class ApplicationPatternGenerator implements PatternGenerator {
|
||||||
|
|
||||||
|
/** Private logger instance for debugging purpose */
|
||||||
|
private static final Logger s_log = Logger.getLogger(PatternGenerator.class);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implementation iof the Interface class.
|
||||||
|
*
|
||||||
|
* @param key
|
||||||
|
* @param req
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
public String[] generateValues(String key,
|
public String[] generateValues(String key,
|
||||||
HttpServletRequest req) {
|
HttpServletRequest req) {
|
||||||
|
|
||||||
final Application app = Web.getContext().getApplication();
|
final Application app = Web.getContext().getApplication();
|
||||||
|
|
||||||
if (app != null) {
|
if (app != null) {
|
||||||
return new String[] {
|
return new String[] {
|
||||||
app.getPackageType().getKey()
|
app.getApplicationType().getName()
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SiteNodeRequestContext is deprecated and replaced by web.WebContext
|
||||||
|
// used in the code above (Web.getContext().
|
||||||
|
// This code should never be executed.
|
||||||
|
s_log.error("Application not found in WebApplication context!");
|
||||||
|
|
||||||
|
|
||||||
SiteNodeRequestContext ctx = (SiteNodeRequestContext)
|
SiteNodeRequestContext ctx = (SiteNodeRequestContext)
|
||||||
DispatcherHelper.getRequestContext(req);
|
DispatcherHelper.getRequestContext(req);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,8 @@ import com.arsdigita.kernel.Kernel;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generates a pattern for based on the request negotiated
|
* Generates a pattern based on the request negotiated locale
|
||||||
* locale in com.arsdigita.kernel.KernelContext
|
* in com.arsdigita.kernel.KernelContext
|
||||||
*/
|
*/
|
||||||
public class LocalePatternGenerator implements PatternGenerator {
|
public class LocalePatternGenerator implements PatternGenerator {
|
||||||
public String[] generateValues(String key,
|
public String[] generateValues(String key,
|
||||||
|
|
|
||||||
|
|
@ -115,9 +115,12 @@ import org.apache.log4j.Logger;
|
||||||
* @author Richard W.M. Jones
|
* @author Richard W.M. Jones
|
||||||
*/
|
*/
|
||||||
public class PatternStylesheetResolver implements StylesheetResolver {
|
public class PatternStylesheetResolver implements StylesheetResolver {
|
||||||
|
|
||||||
|
/** Logger instance for debugging. */
|
||||||
private static final Logger s_log = Logger.getLogger
|
private static final Logger s_log = Logger.getLogger
|
||||||
(PatternStylesheetResolver.class);
|
(PatternStylesheetResolver.class);
|
||||||
|
|
||||||
|
/** List of registered pattern generators which are queried in turn. */
|
||||||
private static final HashMap s_generators = new HashMap();
|
private static final HashMap s_generators = new HashMap();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -22,15 +22,12 @@ import java.net.URL;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The various <code>PresentationManager</code> classes resolve
|
* The various <code>PresentationManager</code> classes resolve requests
|
||||||
* requests into stylesheets using classes derived from this
|
* into stylesheets using classes derived from this interface.
|
||||||
* interface.
|
*
|
||||||
|
* @version $Id: StylesheetResolver.java 287 2005-02-22 00:29:02Z sskracic $
|
||||||
*/
|
*/
|
||||||
public interface StylesheetResolver {
|
public interface StylesheetResolver {
|
||||||
public static final String versionId =
|
|
||||||
"$Id: StylesheetResolver.java 287 2005-02-22 00:29:02Z sskracic $" +
|
|
||||||
"$Author: sskracic $" +
|
|
||||||
"$DateTime: 2004/08/16 18:10:38 $";
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Resolves a template for the request.
|
* Resolves a template for the request.
|
||||||
|
|
|
||||||
|
|
@ -33,8 +33,8 @@ import org.apache.log4j.Logger;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generates a set of pattern values based on the URL path
|
* Generates a set of pattern values based on the URL path info
|
||||||
* info for the current request. Slashes in the request are
|
* for the current request. Slashes in the request are
|
||||||
* translated into hyphens; the file extension is stripped;
|
* translated into hyphens; the file extension is stripped;
|
||||||
* the any 'index' is removed, except for the top level.
|
* the any 'index' is removed, except for the top level.
|
||||||
*
|
*
|
||||||
|
|
@ -140,7 +140,7 @@ public class URLPatternGenerator implements PatternGenerator {
|
||||||
return url.substring(base.length()-1);
|
return url.substring(base.length()-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// XXX fix me, why vcan't we get this from Web.getConfig.getRequestURL
|
// XXX fix me, why can't we get this from Web.getConfig.getRequestURL
|
||||||
private String getBasePath() {
|
private String getBasePath() {
|
||||||
SiteNodeRequestContext ctx = (SiteNodeRequestContext)
|
SiteNodeRequestContext ctx = (SiteNodeRequestContext)
|
||||||
DispatcherHelper.getRequestContext(Web.getRequest());
|
DispatcherHelper.getRequestContext(Web.getRequest());
|
||||||
|
|
|
||||||
|
|
@ -74,7 +74,9 @@ import org.apache.log4j.Logger;
|
||||||
*/
|
*/
|
||||||
public class Application extends Resource {
|
public class Application extends Resource {
|
||||||
|
|
||||||
|
/** Logger instance for debugging */
|
||||||
private static final Logger s_log = Logger.getLogger(Application.class);
|
private static final Logger s_log = Logger.getLogger(Application.class);
|
||||||
|
|
||||||
public static final String PRIMARY_URL = "primaryURL";
|
public static final String PRIMARY_URL = "primaryURL";
|
||||||
private static final String SLASH = "/";
|
private static final String SLASH = "/";
|
||||||
|
|
||||||
|
|
@ -215,7 +217,7 @@ public class Application extends Resource {
|
||||||
Assert.isTrue(!fragment.equals(""),
|
Assert.isTrue(!fragment.equals(""),
|
||||||
"The URL fragment must not be the empty string");
|
"The URL fragment must not be the empty string");
|
||||||
}
|
}
|
||||||
|
s_log.debug("Application type legacy free: " + type.m_legacyFree );
|
||||||
if (type.m_legacyFree) {
|
if (type.m_legacyFree) {
|
||||||
return Application.make(type,fragment,title,parent,createContainerGroup);
|
return Application.make(type,fragment,title,parent,createContainerGroup);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -250,14 +252,29 @@ public class Application extends Resource {
|
||||||
"slashes; I got '" + fragment + "'");
|
"slashes; I got '" + fragment + "'");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Problem with "slash or not slash"
|
||||||
|
* String fragment (=url) is expected without any slash, just the name.
|
||||||
|
* Given the original code below the fragment appears in database as
|
||||||
|
* "/[fragment]" but all of the other code expects "/[fragment]/" and
|
||||||
|
* all other applications created as legacy compatible have a trailing
|
||||||
|
* slash!
|
||||||
|
* So I experimentally changed the code to have a trailing slash.
|
||||||
|
* Because no other code uses legacy free applications I suppose the
|
||||||
|
* original code here is less tested.
|
||||||
|
* pboy April 2011 see method setPath() as well!
|
||||||
|
*/
|
||||||
if (parent == null) {
|
if (parent == null) {
|
||||||
if (fragment == null) {
|
if (fragment == null) {
|
||||||
app.setPath("");
|
// app.setPath(""); original code modified see above
|
||||||
|
app.setPath(SLASH);
|
||||||
} else {
|
} else {
|
||||||
app.setPath(SLASH + fragment);
|
// app.setPath(SLASH + fragment); original code modified see above
|
||||||
|
app.setPath(SLASH + fragment + SLASH);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
app.setPath(parent.getPath() + SLASH + fragment);
|
// app.setPath(parent.getPath() + SLASH + fragment); original code
|
||||||
|
// modified see above
|
||||||
|
app.setPath(parent.getPath() + SLASH + fragment + SLASH);
|
||||||
}
|
}
|
||||||
|
|
||||||
return app;
|
return app;
|
||||||
|
|
@ -382,6 +399,8 @@ public class Application extends Resource {
|
||||||
|
|
||||||
// Can return null.
|
// Can return null.
|
||||||
public static Application retrieveApplicationForPath(String path) {
|
public static Application retrieveApplicationForPath(String path) {
|
||||||
|
|
||||||
|
s_log.debug("retrieveApplicationForPath: " + path);
|
||||||
DataCollection dataCollection =
|
DataCollection dataCollection =
|
||||||
SessionManager.getSession().retrieve(BASE_DATA_OBJECT_TYPE);
|
SessionManager.getSession().retrieve(BASE_DATA_OBJECT_TYPE);
|
||||||
|
|
||||||
|
|
@ -392,6 +411,7 @@ public class Application extends Resource {
|
||||||
dataCollection.close();
|
dataCollection.close();
|
||||||
return Application.retrieveApplication(dataObject);
|
return Application.retrieveApplication(dataObject);
|
||||||
} else {
|
} else {
|
||||||
|
s_log.debug("retrieveApplicationForPath: No application found on " + path);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -577,12 +597,23 @@ public class Application extends Resource {
|
||||||
public final void setPath(String path) {
|
public final void setPath(String path) {
|
||||||
if (Assert.isEnabled()) {
|
if (Assert.isEnabled()) {
|
||||||
Assert.exists(path, String.class);
|
Assert.exists(path, String.class);
|
||||||
Assert.isTrue
|
/* Modified by pboy April 2011
|
||||||
(path.equals("") || (path.startsWith(SLASH)
|
* This Assert statement prevents a trailing slash. setPath is currently called
|
||||||
&& !path.endsWith(SLASH)),
|
* only by Applicatiom#make which creates a LEGACY FREE application.
|
||||||
"The path must either be the empty string (for the " +
|
* Legacy compatible applications are currently created WITH a trailing slash
|
||||||
"default application) or it must start with '/' and *not* " +
|
* (see e.g. SiteNode#setURL oder SiteNode#getURLFromParent.) Therefore for the
|
||||||
"end in '/'; I got '" + path + "'");
|
* time beeing if we must support legacy free and legacy compatible applications
|
||||||
|
* in parallel we have to use a trailing slash for legacy free applications,
|
||||||
|
* otherwise they will not be found by methods like retrieveApplicationForPath()
|
||||||
|
* which is called by legacy compatible apps including a trailing slash. If
|
||||||
|
* legacy free apps are store without trailing slash the search will never match.
|
||||||
|
*/
|
||||||
|
// Assert.isTrue
|
||||||
|
// (path.equals("") || (path.startsWith(SLASH)
|
||||||
|
// && !path.endsWith(SLASH)),
|
||||||
|
// "The path must either be the empty string (for the " +
|
||||||
|
// "default application) or it must start with '/' and *not* " +
|
||||||
|
// "end in '/'; I got '" + path + "'");
|
||||||
}
|
}
|
||||||
|
|
||||||
set(PRIMARY_URL, path);
|
set(PRIMARY_URL, path);
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,8 @@ import com.arsdigita.domain.DataObjectNotFoundException;
|
||||||
import com.arsdigita.domain.DomainObjectFactory;
|
import com.arsdigita.domain.DomainObjectFactory;
|
||||||
import com.arsdigita.db.Sequences;
|
import com.arsdigita.db.Sequences;
|
||||||
import com.arsdigita.util.Assert;
|
import com.arsdigita.util.Assert;
|
||||||
|
import com.arsdigita.util.StringUtils;
|
||||||
|
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
|
@ -113,6 +115,7 @@ public class ApplicationType extends ResourceType {
|
||||||
m_legacyFree = true;
|
m_legacyFree = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
protected String getBaseDataObjectType() {
|
protected String getBaseDataObjectType() {
|
||||||
return BASE_DATA_OBJECT_TYPE;
|
return BASE_DATA_OBJECT_TYPE;
|
||||||
}
|
}
|
||||||
|
|
@ -169,6 +172,14 @@ public class ApplicationType extends ResourceType {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Legacy compatible application type
|
||||||
|
* @param dataObjectType
|
||||||
|
* @param packageType
|
||||||
|
* @param title
|
||||||
|
* @param applicationObjectType
|
||||||
|
* @param createContainerGroup
|
||||||
|
*/
|
||||||
protected ApplicationType(final String dataObjectType,
|
protected ApplicationType(final String dataObjectType,
|
||||||
final PackageType packageType,
|
final PackageType packageType,
|
||||||
final String title,
|
final String title,
|
||||||
|
|
@ -561,6 +572,12 @@ public class ApplicationType extends ResourceType {
|
||||||
remove("relevantPrivileges", privDO);
|
remove("relevantPrivileges", privDO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the attribute object type from database, which is the fully
|
||||||
|
* qualified classname of the applications domain class.
|
||||||
|
*
|
||||||
|
* @return object typ (fully qualified classname) as string
|
||||||
|
*/
|
||||||
public String getApplicationObjectType() {
|
public String getApplicationObjectType() {
|
||||||
String objectType = (String)get("objectType");
|
String objectType = (String)get("objectType");
|
||||||
|
|
||||||
|
|
@ -575,6 +592,38 @@ public class ApplicationType extends ResourceType {
|
||||||
set("objectType", objectType);
|
set("objectType", objectType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides an "urlized" name for an application, especially needed by
|
||||||
|
* PatternStyleSheetResolver to locate the xsl templates for an application
|
||||||
|
* in the local file system tree.
|
||||||
|
*
|
||||||
|
* We use the developer provided title value as name stripping off all white
|
||||||
|
* spaces. So developer has some influence on the term.
|
||||||
|
*
|
||||||
|
* The name may not be unique! Uniqueness is by no way technically
|
||||||
|
* guaranteed! This is developer's responsibility.
|
||||||
|
*
|
||||||
|
* This method has been added to enable legacy-free types of applications to
|
||||||
|
* work in CCM. Class ApplicationType is meant to replace the deprecated
|
||||||
|
* class PackageType which provide this facility by its packageKey property.
|
||||||
|
* So wwe have to provide this functionality by ApplicationType as well
|
||||||
|
* which has no kind of "key" by design.
|
||||||
|
*/
|
||||||
|
public String getName() {
|
||||||
|
|
||||||
|
// m_legacyFree seems sometimes not set correctly!
|
||||||
|
// if (m_legacyFree == true ) {
|
||||||
|
if (getPackageType() == null) { // indicates a legacy free ApplicationType
|
||||||
|
// XXX we need a better way to determine a name, probably using
|
||||||
|
// the class name without leading package name.
|
||||||
|
s_log.debug("Expect XSL templates at " + StringUtils.urlize(getTitle()));
|
||||||
|
return StringUtils.urlize(getTitle());
|
||||||
|
} else {
|
||||||
|
return this.getPackageType().getKey();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Declare this ApplicationType to be a singleton. That is to
|
* Declare this ApplicationType to be a singleton. That is to
|
||||||
* say, there ought to only ever be one Application of this type
|
* say, there ought to only ever be one Application of this type
|
||||||
|
|
|
||||||
|
|
@ -81,7 +81,7 @@ public class Web {
|
||||||
*
|
*
|
||||||
* @return A <code>WebContext</code> object; it cannot be null
|
* @return A <code>WebContext</code> object; it cannot be null
|
||||||
*/
|
*/
|
||||||
public static final WebContext getContext() {
|
public static WebContext getContext() {
|
||||||
if (s_context == null) {
|
if (s_context == null) {
|
||||||
s_context = new WebContextLocal();
|
s_context = new WebContextLocal();
|
||||||
}
|
}
|
||||||
|
|
@ -94,7 +94,7 @@ public class Web {
|
||||||
* @return A <code>WebConfig</code> configuration record; it
|
* @return A <code>WebConfig</code> configuration record; it
|
||||||
* cannot be null
|
* cannot be null
|
||||||
*/
|
*/
|
||||||
public static final WebConfig getConfig() {
|
public static WebConfig getConfig() {
|
||||||
if (s_config == null) {
|
if (s_config == null) {
|
||||||
s_config = new WebConfig();
|
s_config = new WebConfig();
|
||||||
s_config.require("ccm-core/web.properties");
|
s_config.require("ccm-core/web.properties");
|
||||||
|
|
@ -108,7 +108,7 @@ public class Web {
|
||||||
* @return The current <code>HttpServletRequest</code>; it can be
|
* @return The current <code>HttpServletRequest</code>; it can be
|
||||||
* null
|
* null
|
||||||
*/
|
*/
|
||||||
public static final HttpServletRequest getRequest() {
|
public static HttpServletRequest getRequest() {
|
||||||
return (HttpServletRequest) s_request.get();
|
return (HttpServletRequest) s_request.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
*/
|
*/
|
||||||
package com.arsdigita.web;
|
package com.arsdigita.web;
|
||||||
|
|
||||||
import com.arsdigita.web.Application;
|
// import com.arsdigita.web.Application;
|
||||||
import com.arsdigita.kernel.User;
|
import com.arsdigita.kernel.User;
|
||||||
import com.arsdigita.kernel.security.UserContext;
|
import com.arsdigita.kernel.security.UserContext;
|
||||||
import com.arsdigita.util.Assert;
|
import com.arsdigita.util.Assert;
|
||||||
|
|
@ -39,17 +39,22 @@ import org.apache.log4j.Logger;
|
||||||
*/
|
*/
|
||||||
public final class WebContext extends Record {
|
public final class WebContext extends Record {
|
||||||
|
|
||||||
|
/** Logger instance for debugging */
|
||||||
private static final Logger s_log = Logger.getLogger(WebContext.class);
|
private static final Logger s_log = Logger.getLogger(WebContext.class);
|
||||||
|
|
||||||
private Application m_application = null;
|
private Application m_application = null;
|
||||||
private URL m_requestURL = null;
|
private URL m_requestURL = null;
|
||||||
|
|
||||||
|
/** List of properties making up a Web Context */
|
||||||
private static String[] s_fields = new String[] {
|
private static String[] s_fields = new String[] {
|
||||||
"User",
|
"User",
|
||||||
"Application",
|
"Application",
|
||||||
"RequestURL"
|
"RequestURL"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*/
|
||||||
WebContext() {
|
WebContext() {
|
||||||
super(WebContext.class, s_log, s_fields);
|
super(WebContext.class, s_log, s_fields);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,32 +1,19 @@
|
||||||
package com.arsdigita.london.navigation;
|
package com.arsdigita.london.navigation;
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import org.apache.commons.cli.CommandLine;
|
|
||||||
import org.apache.log4j.Logger;
|
|
||||||
|
|
||||||
import com.arsdigita.categorization.Category;
|
|
||||||
import com.arsdigita.categorization.RootCategoryCollection;
|
|
||||||
import com.arsdigita.cms.ContentSection;
|
|
||||||
import com.arsdigita.cms.SecurityManager;
|
|
||||||
import com.arsdigita.cms.ui.role.RoleFactory;
|
|
||||||
import com.arsdigita.domain.DomainObject;
|
import com.arsdigita.domain.DomainObject;
|
||||||
import com.arsdigita.domain.DomainObjectFactory;
|
import com.arsdigita.domain.DomainObjectFactory;
|
||||||
import com.arsdigita.domain.DomainObjectInstantiator;
|
import com.arsdigita.domain.DomainObjectInstantiator;
|
||||||
import com.arsdigita.kernel.Kernel;
|
import com.arsdigita.kernel.Kernel;
|
||||||
import com.arsdigita.kernel.KernelExcursion;
|
import com.arsdigita.kernel.KernelExcursion;
|
||||||
import com.arsdigita.kernel.Role;
|
|
||||||
import com.arsdigita.kernel.RoleCollection;
|
|
||||||
import com.arsdigita.kernel.permissions.PrivilegeDescriptor;
|
|
||||||
import com.arsdigita.london.terms.Domain;
|
import com.arsdigita.london.terms.Domain;
|
||||||
import com.arsdigita.london.util.Program;
|
import com.arsdigita.london.util.Program;
|
||||||
import com.arsdigita.london.util.Transaction;
|
import com.arsdigita.london.util.Transaction;
|
||||||
import com.arsdigita.persistence.DataObject;
|
import com.arsdigita.persistence.DataObject;
|
||||||
import com.arsdigita.persistence.DataQuery;
|
|
||||||
import com.arsdigita.web.Application;
|
import com.arsdigita.web.Application;
|
||||||
|
|
||||||
|
import org.apache.commons.cli.CommandLine;
|
||||||
|
import org.apache.log4j.Logger;
|
||||||
|
|
||||||
public class AddNavigation extends Program {
|
public class AddNavigation extends Program {
|
||||||
|
|
||||||
private static final Logger LOG = Logger.getLogger(AddNavigation.class);
|
private static final Logger LOG = Logger.getLogger(AddNavigation.class);
|
||||||
|
|
@ -37,6 +24,7 @@ public class AddNavigation extends Program {
|
||||||
|
|
||||||
private void addNavigation(String navURL, String navTitle, String defaultDomain) {
|
private void addNavigation(String navURL, String navTitle, String defaultDomain) {
|
||||||
if (!Application.isInstalled(Navigation.BASE_DATA_OBJECT_TYPE, "/"+navURL+"/")) {
|
if (!Application.isInstalled(Navigation.BASE_DATA_OBJECT_TYPE, "/"+navURL+"/")) {
|
||||||
|
|
||||||
DomainObjectFactory.registerInstantiator(
|
DomainObjectFactory.registerInstantiator(
|
||||||
Navigation.BASE_DATA_OBJECT_TYPE, new DomainObjectInstantiator() {
|
Navigation.BASE_DATA_OBJECT_TYPE, new DomainObjectInstantiator() {
|
||||||
public DomainObject doNewInstance(DataObject dataObject) {
|
public DomainObject doNewInstance(DataObject dataObject) {
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
<ccm:application xmlns:ccm="http://ccm.redhat.com/ccm-project"
|
<ccm:application xmlns:ccm="http://ccm.redhat.com/ccm-project"
|
||||||
name="ccm-portalworkspace"
|
name="ccm-portalworkspace"
|
||||||
prettyName="Portal Workspace"
|
prettyName="Portal Workspace"
|
||||||
version="6.6.1"
|
version="6.6.2"
|
||||||
release="1"
|
release="1"
|
||||||
webapp="ROOT">
|
webapp="ROOT">
|
||||||
<ccm:dependencies>
|
<ccm:dependencies>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,44 @@
|
||||||
|
--
|
||||||
|
-- Copyright (C) 2011 Peter Boy All Rights Reserved.
|
||||||
|
--
|
||||||
|
-- This library is free software; you can redistribute it and/or
|
||||||
|
-- modify it under the terms of the GNU Lesser General Public License
|
||||||
|
-- as published by the Free Software Foundation; either version 2.1 of
|
||||||
|
-- the License, or (at your option) any later version.
|
||||||
|
--
|
||||||
|
-- This library is distributed in the hope that it will be useful,
|
||||||
|
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
-- Lesser General Public License for more details.
|
||||||
|
--
|
||||||
|
-- You should have received a copy of the GNU Lesser General Public
|
||||||
|
-- License along with this library; if not, write to the Free Software
|
||||||
|
-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
--
|
||||||
|
-- $Id: upd_system_tables.sql pboy $
|
||||||
|
|
||||||
|
-- adjust various system tables to the new name of application
|
||||||
|
|
||||||
|
|
||||||
|
update application_types
|
||||||
|
set title='Portal Workspace',
|
||||||
|
package_type_id=null
|
||||||
|
where object_type='com.arsdigita.portalworkspace.Workspace' ;
|
||||||
|
|
||||||
|
update applications
|
||||||
|
set package_id=null
|
||||||
|
where primary_url = '/portal/' ;
|
||||||
|
|
||||||
|
-- table site_nodes
|
||||||
|
delete from site_nodes
|
||||||
|
where name like '%portal%' ;
|
||||||
|
|
||||||
|
-- table apm_packages
|
||||||
|
delete from apm_packages
|
||||||
|
where pretty_name like '%Portal%' ;
|
||||||
|
|
||||||
|
-- table apm_package_types doesn't require an update
|
||||||
|
delete from apm_package_types
|
||||||
|
where pretty_name like '%Workspace%' ;
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
--
|
||||||
|
-- Copyright (C) 2011 Peter Boy All Rights Reserved.
|
||||||
|
--
|
||||||
|
-- This library is free software; you can redistribute it and/or
|
||||||
|
-- modify it under the terms of the GNU Lesser General Public License
|
||||||
|
-- as published by the Free Software Foundation; either version 2.1 of
|
||||||
|
-- the License, or (at your option) any later version.
|
||||||
|
--
|
||||||
|
-- This library is distributed in the hope that it will be useful,
|
||||||
|
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
-- Lesser General Public License for more details.
|
||||||
|
--
|
||||||
|
-- You should have received a copy of the GNU Lesser General Public
|
||||||
|
-- License along with this library; if not, write to the Free Software
|
||||||
|
-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
--
|
||||||
|
-- $DateTime: 2011/03/27 23:15:09 $
|
||||||
|
-- $Id: oracle-se-6.6.0-6.6.1 pboy $
|
||||||
|
|
||||||
|
|
||||||
|
@@ default/6.6.1-6.6.2/upd_system_tables.sql
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
--
|
||||||
|
-- Copyright (C) 2011 Peter Boy All Rights Reserved.
|
||||||
|
--
|
||||||
|
-- This library is free software; you can redistribute it and/or
|
||||||
|
-- modify it under the terms of the GNU Lesser General Public License
|
||||||
|
-- as published by the Free Software Foundation; either version 2.1 of
|
||||||
|
-- the License, or (at your option) any later version.
|
||||||
|
--
|
||||||
|
-- This library is distributed in the hope that it will be useful,
|
||||||
|
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
-- Lesser General Public License for more details.
|
||||||
|
--
|
||||||
|
-- You should have received a copy of the GNU Lesser General Public
|
||||||
|
-- License along with this library; if not, write to the Free Software
|
||||||
|
-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
--
|
||||||
|
-- $DateTime: 2010/11/10 23:15:09 $
|
||||||
|
|
||||||
|
\echo Red Hat Enterprise ccm-portalworkspace 6.6.0 -> 6.6.1 Upgrade Script (PostgreSQL)
|
||||||
|
|
||||||
|
begin;
|
||||||
|
|
||||||
|
\i default/6.6.1-6.6.2/upd_system_tables.sql
|
||||||
|
|
||||||
|
commit;
|
||||||
|
|
@ -22,4 +22,7 @@
|
||||||
<version from="6.6.0" to="6.6.1">
|
<version from="6.6.0" to="6.6.1">
|
||||||
<script sql="ccm-portalworkspace/upgrade/::database::-6.6.0-6.6.1.sql"/>
|
<script sql="ccm-portalworkspace/upgrade/::database::-6.6.0-6.6.1.sql"/>
|
||||||
</version>
|
</version>
|
||||||
|
<version from="6.6.1" to="6.6.2">
|
||||||
|
<script sql="ccm-portalworkspace/upgrade/::database::-6.6.1-6.6.2.sql"/>
|
||||||
|
</version>
|
||||||
</upgrade>
|
</upgrade>
|
||||||
|
|
|
||||||
|
|
@ -18,12 +18,13 @@
|
||||||
|
|
||||||
package com.arsdigita.portalworkspace;
|
package com.arsdigita.portalworkspace;
|
||||||
|
|
||||||
import org.apache.log4j.Logger;
|
// import com.arsdigita.domain.DomainObject;
|
||||||
|
// import com.arsdigita.kernel.ACSObjectInstantiator;
|
||||||
import com.arsdigita.kernel.Kernel;
|
import com.arsdigita.kernel.Kernel;
|
||||||
import com.arsdigita.kernel.KernelExcursion;
|
import com.arsdigita.kernel.KernelExcursion;
|
||||||
import com.arsdigita.kernel.ResourceType;
|
import com.arsdigita.kernel.ResourceType;
|
||||||
import com.arsdigita.loader.PackageLoader;
|
import com.arsdigita.loader.PackageLoader;
|
||||||
|
// import com.arsdigita.persistence.DataObject;
|
||||||
import com.arsdigita.portalworkspace.portlet.ApplicationDirectoryPortlet;
|
import com.arsdigita.portalworkspace.portlet.ApplicationDirectoryPortlet;
|
||||||
import com.arsdigita.portalworkspace.portlet.ContentDirectoryPortlet;
|
import com.arsdigita.portalworkspace.portlet.ContentDirectoryPortlet;
|
||||||
import com.arsdigita.portalworkspace.portlet.FreeformHTMLPortlet;
|
import com.arsdigita.portalworkspace.portlet.FreeformHTMLPortlet;
|
||||||
|
|
@ -40,8 +41,11 @@ import com.arsdigita.util.parameter.BooleanParameter;
|
||||||
import com.arsdigita.util.parameter.Parameter;
|
import com.arsdigita.util.parameter.Parameter;
|
||||||
import com.arsdigita.util.parameter.StringParameter;
|
import com.arsdigita.util.parameter.StringParameter;
|
||||||
import com.arsdigita.web.Application;
|
import com.arsdigita.web.Application;
|
||||||
|
// import com.arsdigita.web.ApplicationSetup;
|
||||||
import com.arsdigita.web.ApplicationType;
|
import com.arsdigita.web.ApplicationType;
|
||||||
|
|
||||||
|
import org.apache.log4j.Logger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Executes nonrecurring at install time and loads (and configures ) a default
|
* Executes nonrecurring at install time and loads (and configures ) a default
|
||||||
* workspace instance (i.e. instance of ccm-portalworkspace) in a default
|
* workspace instance (i.e. instance of ccm-portalworkspace) in a default
|
||||||
|
|
@ -86,7 +90,7 @@ public class Loader extends PackageLoader {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Run script invoked by the loader script.
|
* Run script invoked by com.arsdigita.packing loader script.
|
||||||
*
|
*
|
||||||
* @param ctx
|
* @param ctx
|
||||||
*/
|
*/
|
||||||
|
|
@ -128,9 +132,9 @@ public class Loader extends PackageLoader {
|
||||||
if (url != null) {
|
if (url != null) {
|
||||||
|
|
||||||
// check weather the url parameter is properly formatted
|
// check weather the url parameter is properly formatted
|
||||||
s_log.debug("process url " + url);
|
s_log.error("process url " + url);
|
||||||
Assert.isTrue(url.startsWith("/"), "url starts with /");
|
Assert.isTrue(url.startsWith("/"), "url starts not with /");
|
||||||
Assert.isTrue(url.endsWith("/"), "url ends with /");
|
Assert.isTrue(url.endsWith("/"), "url ends not with /");
|
||||||
Assert.isTrue(!url.equals("/"), "url is not /");
|
Assert.isTrue(!url.equals("/"), "url is not /");
|
||||||
|
|
||||||
int last = url.lastIndexOf("/", url.length() - 2);
|
int last = url.lastIndexOf("/", url.length() - 2);
|
||||||
|
|
@ -145,36 +149,52 @@ public class Loader extends PackageLoader {
|
||||||
} else {
|
} else {
|
||||||
name = url.substring(1, url.length() - 1);
|
name = url.substring(1, url.length() - 1);
|
||||||
}
|
}
|
||||||
s_log.debug("node name is " + name);
|
s_log.error("node name is " + name);
|
||||||
|
|
||||||
// set up the portal node
|
// set up the portal node
|
||||||
Workspace workspace = Workspace.createWorkspace(name, title,
|
// Workspace workspace = Workspace.createWorkspace(name, title,
|
||||||
parent, Boolean.TRUE.equals(isPublic));
|
// parent, Boolean.TRUE.equals(isPublic));
|
||||||
|
Workspace workspace = Workspace.createWorkspace(type, name, title,
|
||||||
|
null, parent, Boolean.TRUE.equals(isPublic));
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a workspace application type as a legacy-compatible application
|
* Creates a workspace application type as a legacy-free application type.
|
||||||
* type.
|
|
||||||
*
|
*
|
||||||
* No localization here because it is an invariant configuration.
|
* No localization here because it is an invariant configuration.
|
||||||
*
|
*
|
||||||
|
* NOTE: The wording in the title parameter of ApplicationType determines
|
||||||
|
* the name of the subdirectory for the XSL stylesheets.
|
||||||
|
* It gets "urlized", i.e. trimming leading and trailing blanks and replacing
|
||||||
|
* blanks between words and illegal characters with an hyphen and converted
|
||||||
|
* to lower case.
|
||||||
|
* "Portal Workspace" will become "portal-workspace".
|
||||||
|
*
|
||||||
* Creates an entry in table application_types and a corresponding entry in
|
* Creates an entry in table application_types and a corresponding entry in
|
||||||
* apm_package_types
|
* apm_package_types
|
||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private ApplicationType setupWorkspaceType() {
|
private ApplicationType setupWorkspaceType() {
|
||||||
|
|
||||||
|
s_log.debug("Creating an application type for portal workspace. " +
|
||||||
|
"Base Data Object Type: " + Workspace.BASE_DATA_OBJECT_TYPE);
|
||||||
// The first string is a key parameter used to create a
|
// The first string is a key parameter used to create a
|
||||||
// legacy package type to back the new application type.
|
// legacy package type to back the new application type.
|
||||||
ApplicationType type = ApplicationType.createApplicationType(
|
// ApplicationType type = ApplicationType.createApplicationType(
|
||||||
"portalworkspace",
|
// "portalworkspace",
|
||||||
"Portal Workspace",
|
// "Portal Workspace",
|
||||||
Workspace.BASE_DATA_OBJECT_TYPE);
|
// Workspace.BASE_DATA_OBJECT_TYPE);
|
||||||
|
|
||||||
|
|
||||||
|
ApplicationType type = new ApplicationType( "Portal Workspace",
|
||||||
|
Workspace.BASE_DATA_OBJECT_TYPE );
|
||||||
type.setDescription("Portal based collaborative workspaces");
|
type.setDescription("Portal based collaborative workspaces");
|
||||||
type.createGroup();
|
type.createGroup();
|
||||||
return type;
|
return type;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -182,6 +202,9 @@ public class Loader extends PackageLoader {
|
||||||
*
|
*
|
||||||
* Creates an entry for class (=type) c.ad.portalworkspace.WorkspacePage in
|
* Creates an entry for class (=type) c.ad.portalworkspace.WorkspacePage in
|
||||||
* table application_types, but not in apm_package_types.
|
* table application_types, but not in apm_package_types.
|
||||||
|
*
|
||||||
|
* Uses the legacy free type of application Information (i.e. a title string
|
||||||
|
* and the object type = fully qualified domain class name) for creation
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private ResourceType setupWorkspacePageType() {
|
private ResourceType setupWorkspacePageType() {
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,7 @@ import com.arsdigita.util.Assert;
|
||||||
import com.arsdigita.util.UncheckedWrapperException;
|
import com.arsdigita.util.UncheckedWrapperException;
|
||||||
import com.arsdigita.web.Application;
|
import com.arsdigita.web.Application;
|
||||||
import com.arsdigita.web.ApplicationCollection;
|
import com.arsdigita.web.ApplicationCollection;
|
||||||
|
import com.arsdigita.web.ApplicationType;
|
||||||
import com.arsdigita.web.Web;
|
import com.arsdigita.web.Web;
|
||||||
|
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
|
@ -150,7 +151,8 @@ public class Workspace extends Application {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Does the real work to create a workspace in the storage (db)
|
* Does the real work to create a workspace as a legacy compatible
|
||||||
|
* applicationin the storage (db)
|
||||||
*
|
*
|
||||||
* NOTE: Parameter isPublic may be a misnomer, the actual usage of it in the
|
* NOTE: Parameter isPublic may be a misnomer, the actual usage of it in the
|
||||||
* process of application creation uses it as createGroupContainer
|
* process of application creation uses it as createGroupContainer
|
||||||
|
|
@ -179,6 +181,39 @@ public class Workspace extends Application {
|
||||||
return workspace;
|
return workspace;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Does the real work to create a workspace as a legacy free application
|
||||||
|
* in the storage (db)
|
||||||
|
*
|
||||||
|
* NOTE: Parameter isPublic may be a misnomer, the actual usage of it in the
|
||||||
|
* process of application creation uses it as createGroupContainer
|
||||||
|
*
|
||||||
|
* @param url
|
||||||
|
* @param title
|
||||||
|
* @param layout
|
||||||
|
* @param parent
|
||||||
|
* @param isPublic whether to create a workspace group
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static Workspace createWorkspace(ApplicationType type,
|
||||||
|
String url, String title,
|
||||||
|
PageLayout layout,
|
||||||
|
Application parent,
|
||||||
|
boolean isPublic) {
|
||||||
|
if (s_log.isDebugEnabled()) {
|
||||||
|
s_log.debug("Creating group workspace, isPublic:" + isPublic
|
||||||
|
+ " on " + url + " with parent "
|
||||||
|
+ (parent == null ? "none" : parent.getOID().toString()));
|
||||||
|
}
|
||||||
|
if (layout==null) layout = PageLayout.getDefaultLayout();
|
||||||
|
|
||||||
|
Workspace workspace = (Workspace) Application.createApplication(
|
||||||
|
type, url, title, parent, isPublic );
|
||||||
|
workspace.setupGroups(title, isPublic);
|
||||||
|
workspace.setDefaultLayout(layout);
|
||||||
|
return workspace;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Does the real work to create a workspace in the storage (db)
|
* Does the real work to create a workspace in the storage (db)
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
<ccm:application xmlns:ccm="http://ccm.redhat.com/ccm-project"
|
<ccm:application xmlns:ccm="http://ccm.redhat.com/ccm-project"
|
||||||
name="ccm-themedirector"
|
name="ccm-themedirector"
|
||||||
prettyName="Theme Director"
|
prettyName="Theme Director"
|
||||||
version="6.6.1"
|
version="6.6.2"
|
||||||
release="1"
|
release="1"
|
||||||
webapp="ROOT">
|
webapp="ROOT">
|
||||||
<ccm:dependencies>
|
<ccm:dependencies>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,44 @@
|
||||||
|
--
|
||||||
|
-- Copyright (C) 2011 Peter Boy All Rights Reserved.
|
||||||
|
--
|
||||||
|
-- This library is free software; you can redistribute it and/or
|
||||||
|
-- modify it under the terms of the GNU Lesser General Public License
|
||||||
|
-- as published by the Free Software Foundation; either version 2.1 of
|
||||||
|
-- the License, or (at your option) any later version.
|
||||||
|
--
|
||||||
|
-- This library is distributed in the hope that it will be useful,
|
||||||
|
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
-- Lesser General Public License for more details.
|
||||||
|
--
|
||||||
|
-- You should have received a copy of the GNU Lesser General Public
|
||||||
|
-- License along with this library; if not, write to the Free Software
|
||||||
|
-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
--
|
||||||
|
-- $Id: upd_system_tables.sql pboy $
|
||||||
|
|
||||||
|
-- adjust various system tables to the new name of application
|
||||||
|
|
||||||
|
|
||||||
|
update application_types
|
||||||
|
set title='Theme Director',
|
||||||
|
package_type_id=null
|
||||||
|
where object_type='com.arsdigita.themedirector.ThemeDirector' ;
|
||||||
|
|
||||||
|
update applications
|
||||||
|
set package_id=null
|
||||||
|
where primary_url = '/admin/themes/' ;
|
||||||
|
|
||||||
|
-- table site_nodes
|
||||||
|
delete from site_nodes
|
||||||
|
where name like '%theme%' ;
|
||||||
|
|
||||||
|
-- table apm_packages
|
||||||
|
delete from apm_packages
|
||||||
|
where pretty_name like '%Theme%' ;
|
||||||
|
|
||||||
|
-- table apm_package_types doesn't require an update
|
||||||
|
delete from apm_package_types
|
||||||
|
where pretty_name like '%Theme%' ;
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
--
|
||||||
|
-- Copyright (C) 2011 Peter Boy All Rights Reserved.
|
||||||
|
--
|
||||||
|
-- This library is free software; you can redistribute it and/or
|
||||||
|
-- modify it under the terms of the GNU Lesser General Public License
|
||||||
|
-- as published by the Free Software Foundation; either version 2.1 of
|
||||||
|
-- the License, or (at your option) any later version.
|
||||||
|
--
|
||||||
|
-- This library is distributed in the hope that it will be useful,
|
||||||
|
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
-- Lesser General Public License for more details.
|
||||||
|
--
|
||||||
|
-- You should have received a copy of the GNU Lesser General Public
|
||||||
|
-- License along with this library; if not, write to the Free Software
|
||||||
|
-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
--
|
||||||
|
-- $DateTime: 2011/03/27 23:15:09 $
|
||||||
|
-- $Id: oracle-se-6.6.0-6.6.1 pboy $
|
||||||
|
|
||||||
|
@@ default/6.6.0-6.6.1/upd_theme_app_table.sql
|
||||||
|
@@ default/6.6.0-6.6.1/upd_system_tables.sql
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
--
|
||||||
|
-- Copyright (C) 2011 Peter Boy All Rights Reserved.
|
||||||
|
--
|
||||||
|
-- This library is free software; you can redistribute it and/or
|
||||||
|
-- modify it under the terms of the GNU Lesser General Public License
|
||||||
|
-- as published by the Free Software Foundation; either version 2.1 of
|
||||||
|
-- the License, or (at your option) any later version.
|
||||||
|
--
|
||||||
|
-- This library is distributed in the hope that it will be useful,
|
||||||
|
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
-- Lesser General Public License for more details.
|
||||||
|
--
|
||||||
|
-- You should have received a copy of the GNU Lesser General Public
|
||||||
|
-- License along with this library; if not, write to the Free Software
|
||||||
|
-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
--
|
||||||
|
-- $DateTime: 2010/11/10 23:15:09 $
|
||||||
|
|
||||||
|
\echo Red Hat Enterprise ccm-themedirector 6.6.0 -> 6.6.1 Upgrade Script (PostgreSQL)
|
||||||
|
|
||||||
|
begin;
|
||||||
|
|
||||||
|
\i default/6.6.1-6.6.2/upd_system_tables.sql
|
||||||
|
|
||||||
|
commit;
|
||||||
|
|
@ -11,4 +11,7 @@
|
||||||
<version from="6.6.0" to="6.6.1">
|
<version from="6.6.0" to="6.6.1">
|
||||||
<script sql="ccm-themedirector/upgrade/::database::-6.6.0-6.6.1.sql"/>
|
<script sql="ccm-themedirector/upgrade/::database::-6.6.0-6.6.1.sql"/>
|
||||||
</version>
|
</version>
|
||||||
|
<version from="6.6.1" to="6.6.2">
|
||||||
|
<script sql="ccm-themedirector/upgrade/::database::-6.6.1-6.6.2.sql"/>
|
||||||
|
</version>
|
||||||
</upgrade>
|
</upgrade>
|
||||||
|
|
|
||||||
|
|
@ -49,26 +49,45 @@ public class Loader extends PackageLoader implements ThemeDirectorConstants {
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates theme manager as a legacy-compatible application type.
|
* Creates theme manager as a legacy-free application type.
|
||||||
*
|
*
|
||||||
|
* NOTE: The wording in the title parameter of ApplicationType determines
|
||||||
|
* the name of the subdirectory for the XSL stylesheets.
|
||||||
|
* It gets "urlized", i.e. trimming leading and trailing blanks and replacing
|
||||||
|
* blanks between words and illegal characters with an hyphen and converted
|
||||||
|
* to lower case.
|
||||||
|
* Example: "Theme Director" will become "theme-director".
|
||||||
|
*
|
||||||
|
* Creates an entry in table application_types and a corresponding entry in
|
||||||
|
* apm_package_types
|
||||||
*/
|
*/
|
||||||
private void setupThemeDirector() {
|
private void setupThemeDirector() {
|
||||||
|
|
||||||
// create application type
|
// create application type
|
||||||
ApplicationType type = ApplicationType.createApplicationType(
|
// legacy compatible style of creation
|
||||||
"themedirector",
|
// ApplicationType type = ApplicationType.createApplicationType(
|
||||||
"CCM Themes Administration",
|
// "themedirector",
|
||||||
ThemeDirector.BASE_DATA_OBJECT_TYPE);
|
// "CCM Themes Administration",
|
||||||
|
// ThemeDirector.BASE_DATA_OBJECT_TYPE);
|
||||||
|
// EXPERIMENTAL legacy free style of creation
|
||||||
|
ApplicationType type =
|
||||||
|
new ApplicationType( "Theme Director",
|
||||||
|
ThemeDirector.BASE_DATA_OBJECT_TYPE );
|
||||||
|
|
||||||
type.setDescription("CCM themes administration");
|
type.setDescription("CCM themes administration");
|
||||||
|
|
||||||
Application admin = Application.retrieveApplicationForPath("/admin/");
|
Application admin = Application.retrieveApplicationForPath("/admin/");
|
||||||
|
|
||||||
// create application instance
|
// create application instance as a legacy compatible app
|
||||||
|
// Whether a legacy compatible or a legacy free application is
|
||||||
|
// created depends on the type of ApplicationType above. No need to
|
||||||
|
// modify anything here
|
||||||
Application app =
|
Application app =
|
||||||
Application.createApplication(type,
|
Application.createApplication(type,
|
||||||
"themes",
|
"themes",
|
||||||
"CCM Themes Administration",
|
"CCM Themes Administration",
|
||||||
admin);
|
admin);
|
||||||
|
|
||||||
app.setDescription("CCM themes administration");
|
app.setDescription("CCM themes administration");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,10 +31,10 @@ public interface ThemeDirectorConstants {
|
||||||
/** Name of the directory for themes under development (sub-dir of THEMES_DIR) */
|
/** Name of the directory for themes under development (sub-dir of THEMES_DIR) */
|
||||||
public final static String DEV_DIR_STUB = "devel-themedir";
|
public final static String DEV_DIR_STUB = "devel-themedir";
|
||||||
|
|
||||||
public final static String PROD_THEMES_BASE_DIR =
|
public final static String
|
||||||
THEMES_DIR + "/" + PROD_DIR_STUB+ "/";
|
PROD_THEMES_BASE_DIR = THEMES_DIR + "/" + PROD_DIR_STUB+ "/";
|
||||||
public final static String DEV_THEMES_BASE_DIR =
|
public final static String
|
||||||
THEMES_DIR + "/" + DEV_DIR_STUB + "/";
|
DEV_THEMES_BASE_DIR = THEMES_DIR + "/" + DEV_DIR_STUB + "/";
|
||||||
|
|
||||||
// ccm-themedirector (formerly ccm-ldn-theme) is no longer installed in its
|
// ccm-themedirector (formerly ccm-ldn-theme) is no longer installed in its
|
||||||
// own web context (ROOT or ccm-ldn-theme/ccm-themedirector) so it is not
|
// own web context (ROOT or ccm-ldn-theme/ccm-themedirector) so it is not
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue