Author: rwatler
Date: Mon Mar 8 19:33:26 2010
New Revision: 920472
URL: http://svn.apache.org/viewvc?rev=920472&view=rev
Log:
JS2-1110: add imheritable flag attribute to DPSML pages to suppress inheritance
in cases where a DPSML page is to override/customize a single content path
Added:
portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/test/resources/webapp/WEB-INF/pages/contentfolder/matchdocpage.dpsml
Modified:
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/impl/DynamicPageImpl.java
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/DynamicPageImpl.java
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/AbstractPageManager.java
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/resources/JETSPEED-INF/castor/page-mapping.xml
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/resources/JETSPEED-INF/ojb/page-manager-repository.xml
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/TestCastorXmlPageManager.java
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/TestDatabasePageManager.java
portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/main/java/org/apache/jetspeed/portalsite/impl/PortalSiteSessionContextImpl.java
portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/test/java/org/apache/jetspeed/portalsite/TestPortalSite.java
portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/page/DynamicPage.java
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/ddl-schema/phase2-schema.xml
Modified:
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/impl/DynamicPageImpl.java
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/impl/DynamicPageImpl.java?rev=920472&r1=920471&r2=920472&view=diff
==============================================================================
---
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/impl/DynamicPageImpl.java
(original)
+++
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/impl/DynamicPageImpl.java
Mon Mar 8 19:33:26 2010
@@ -29,6 +29,7 @@
private static final long serialVersionUID = 1L;
private String contentType;
+ private boolean inheritable = true;
/* (non-Javadoc)
* @see org.apache.jetspeed.om.page.DynamicPage#getContentType()
@@ -47,6 +48,22 @@
}
/* (non-Javadoc)
+ * @see org.apache.jetspeed.om.page.DynamicPage#isInheritable()
+ */
+ public boolean isInheritable()
+ {
+ return inheritable;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.jetspeed.om.page.DynamicPage#setInheritable(boolean)
+ */
+ public void setInheritable(boolean inheritable)
+ {
+ this.inheritable = inheritable;
+ }
+
+ /* (non-Javadoc)
* @see org.apache.jetspeed.page.document.impl.NodeImpl#getType()
*/
public String getType()
Modified:
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/DynamicPageImpl.java
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/DynamicPageImpl.java?rev=920472&r1=920471&r2=920472&view=diff
==============================================================================
---
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/DynamicPageImpl.java
(original)
+++
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/om/page/psml/DynamicPageImpl.java
Mon Mar 8 19:33:26 2010
@@ -29,6 +29,7 @@
private static final long serialVersionUID = 1L;
private String contentType;
+ private boolean inheritable = true;
/* (non-Javadoc)
* @see org.apache.jetspeed.om.page.DynamicPage#getContentType()
@@ -47,6 +48,22 @@
}
/* (non-Javadoc)
+ * @see org.apache.jetspeed.om.page.DynamicPage#isInheritable()
+ */
+ public boolean isInheritable()
+ {
+ return inheritable;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.jetspeed.om.page.DynamicPage#setInheritable(boolean)
+ */
+ public void setInheritable(boolean inheritable)
+ {
+ this.inheritable = inheritable;
+ }
+
+ /* (non-Javadoc)
* @see org.apache.jetspeed.page.document.Node#getType()
*/
public String getType()
Modified:
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/AbstractPageManager.java
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/AbstractPageManager.java?rev=920472&r1=920471&r2=920472&view=diff
==============================================================================
---
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/AbstractPageManager.java
(original)
+++
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/java/org/apache/jetspeed/page/AbstractPageManager.java
Mon Mar 8 19:33:26 2010
@@ -1146,6 +1146,7 @@
copyPageAttributes(source, copyIds, dynamicPage);
dynamicPage.setHidden(source.isHidden());
dynamicPage.setContentType(source.getContentType());
+ dynamicPage.setInheritable(source.isInheritable());
return dynamicPage;
}
Modified:
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/resources/JETSPEED-INF/castor/page-mapping.xml
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/resources/JETSPEED-INF/castor/page-mapping.xml?rev=920472&r1=920471&r2=920472&view=diff
==============================================================================
---
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/resources/JETSPEED-INF/castor/page-mapping.xml
(original)
+++
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/resources/JETSPEED-INF/castor/page-mapping.xml
Mon Mar 8 19:33:26 2010
@@ -98,6 +98,10 @@
<field name="contentType" type="string">
<bind-xml name="content-type" node="attribute"/>
</field>
+
+ <field name="inheritable" type="boolean">
+ <bind-xml name="inheritable" node="attribute"/>
+ </field>
</class>
<class name="org.apache.jetspeed.om.page.PageLocalizedFieldImpl">
Modified:
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/resources/JETSPEED-INF/ojb/page-manager-repository.xml
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/resources/JETSPEED-INF/ojb/page-manager-repository.xml?rev=920472&r1=920471&r2=920472&view=diff
==============================================================================
---
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/resources/JETSPEED-INF/ojb/page-manager-repository.xml
(original)
+++
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/main/resources/JETSPEED-INF/ojb/page-manager-repository.xml
Mon Mar 8 19:33:26 2010
@@ -1583,6 +1583,13 @@
jdbc-type="VARCHAR"
/>
+ <field-descriptor
+ name="inheritable"
+ column="IS_INHERITABLE"
+ jdbc-type="INTEGER"
+
conversion="org.apache.ojb.broker.accesslayer.conversions.Boolean2IntFieldConversion"
+ />
+
</class-descriptor>
<class-descriptor
Modified:
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/TestCastorXmlPageManager.java
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/TestCastorXmlPageManager.java?rev=920472&r1=920471&r2=920472&view=diff
==============================================================================
---
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/TestCastorXmlPageManager.java
(original)
+++
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/TestCastorXmlPageManager.java
Mon Mar 8 19:33:26 2010
@@ -404,6 +404,7 @@
DynamicPage testdynamicpage =
pageManager.getDynamicPage("/test001.dpsml");
assertTrue(testdynamicpage.getId().equals("/test001.dpsml"));
assertTrue(testdynamicpage.getContentType().equals("default"));
+ assertTrue(testdynamicpage.isInheritable());
assertTrue(testdynamicpage.getTitle().equals("Test Dynamic Page"));
assertTrue(testdynamicpage.getVersion().equals("2.77"));
rootFragmentElement = testdynamicpage.getRootFragment();
@@ -653,6 +654,7 @@
DynamicPage dynamicpage = pageManager.newDynamicPage("/test002.dpsml");
dynamicpage.setContentType("default");
+ dynamicpage.setInheritable(false);
dynamicpage.setTitle("Created Dynamic Page");
rootFragmentElement = dynamicpage.getRootFragment();
assertTrue(rootFragmentElement instanceof Fragment);
@@ -680,6 +682,7 @@
assertNotNull(dynamicpage);
assertTrue(dynamicpage.getId().equals("/test002.dpsml"));
assertEquals("default", dynamicpage.getContentType());
+ assertFalse(dynamicpage.isInheritable());
assertEquals("Created Dynamic Page", dynamicpage.getTitle());
assertNotNull(dynamicpage.getRootFragment());
rootFragmentElement = dynamicpage.getRootFragment();
@@ -1578,6 +1581,7 @@
assertNotNull(clonedynamicpage);
assertTrue(clonedynamicpage.getId().equals("/cloned.dpsml"));
assertTrue(clonedynamicpage.getContentType().equals("default"));
+ assertTrue(clonedynamicpage.isInheritable());
assertTrue(clonedynamicpage.getTitle().equals("Clone Test Dynamic
Page"));
rootFragmentElement = clonedynamicpage.getRootFragment();
assertTrue(rootFragmentElement instanceof Fragment);
Modified:
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/TestDatabasePageManager.java
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/TestDatabasePageManager.java?rev=920472&r1=920471&r2=920472&view=diff
==============================================================================
---
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/TestDatabasePageManager.java
(original)
+++
portals/jetspeed-2/portal/trunk/components/jetspeed-page-manager/src/test/java/org/apache/jetspeed/page/TestDatabasePageManager.java
Mon Mar 8 19:33:26 2010
@@ -513,7 +513,9 @@
pageManager.updatePageTemplate(pageTemplate);
DynamicPage dynamicPage =
pageManager.newDynamicPage("/dynamic-page.dpsml");
- dynamicPage.setContentType("default");
+ dynamicPage.setContentType("default");
+ assertTrue(dynamicPage.isInheritable());
+ dynamicPage.setInheritable(false);
dynamicPage.setTitle("Created Dynamic Page");
rootFragmentElement = dynamicPage.getRootFragment();
assertTrue(rootFragmentElement instanceof Fragment);
@@ -754,6 +756,7 @@
DynamicPage check =
pageManager.getDynamicPage("/dynamic-page.dpsml");
assertNotNull(check);
assertEquals("default", check.getContentType());
+ assertFalse(check.isInheritable());
assertEquals("Created Dynamic Page", check.getTitle());
assertNotNull(check.getRootFragment());
BaseFragmentElement rootFragmentElement = check.getRootFragment();
@@ -1191,6 +1194,7 @@
assertEquals("/dynamic-page.dpsml", dynamicPage.getPath());
dynamicPage.setTitle("UPDATED");
dynamicPage.setContentType("UPDATED");
+ dynamicPage.setInheritable(true);
pageManager.updateDynamicPage(dynamicPage);
FragmentDefinition fragmentDefinition =
pageManager.getFragmentDefinition("/fragment-definition.fpsml");
Modified:
portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/main/java/org/apache/jetspeed/portalsite/impl/PortalSiteSessionContextImpl.java
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/main/java/org/apache/jetspeed/portalsite/impl/PortalSiteSessionContextImpl.java?rev=920472&r1=920471&r2=920472&view=diff
==============================================================================
---
portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/main/java/org/apache/jetspeed/portalsite/impl/PortalSiteSessionContextImpl.java
(original)
+++
portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/main/java/org/apache/jetspeed/portalsite/impl/PortalSiteSessionContextImpl.java
Mon Mar 8 19:33:26 2010
@@ -952,7 +952,6 @@
// that matches request path; start with root folder in view
Folder contentRequestFolder =
(Folder)view.getNodeView(Folder.PATH_SEPARATOR, null, false, false);
String contentRequestPath = contentRequestFolder.getPath();
- String contentRequestFile = null;
for (;;)
{
// find next path name
@@ -975,6 +974,16 @@
}
}
+ // determine if content request folder matches request
+ // folder assuming request path may include a content
+ // document name, but no deeper folders
+ boolean matchingContentRequestFolder = true;
+ if (contentRequestPath.length() < requestPath.length())
+ {
+ String requestPathTail =
requestPath.substring(contentRequestPath.length());
+ matchingContentRequestFolder =
(requestPathTail.indexOf(Folder.PATH_SEPARATOR_CHAR,
(requestPathTail.startsWith(Folder.PATH_SEPARATOR) ? 1 : 0)) == -1);
+ }
+
// select matching dynamic pages in folders from deepest
// to root folders in content request path
while (contentRequestFolder != null)
@@ -986,6 +995,8 @@
if ((dynamicPages != null) && !dynamicPages.isEmpty())
{
// select matching page
+ DynamicPage matchingPage = null;
+ DynamicPage inheritableMatchingPage = null;
DynamicPage wildcardMatchingPage = null;
Iterator dynamicPagesIter = dynamicPages.iterator();
while (dynamicPagesIter.hasNext())
@@ -997,21 +1008,44 @@
}
else if
(dynamicPage.getContentType().equals(contentType))
{
- // log selected dynamic page
- if (log.isDebugEnabled())
+ boolean inheritableDynamicPage =
dynamicPage.isInheritable();
+ if (matchingContentRequestFolder &&
!inheritableDynamicPage)
+ {
+ matchingPage = dynamicPage;
+ }
+ else if (inheritableDynamicPage)
{
- log.debug("Selected "+contentType+"
content dynamic page, path=" +
view.getManagedDynamicPage(dynamicPage).getPath());
+ inheritableMatchingPage = dynamicPage;
}
- return dynamicPage;
}
}
+ // select matching page
+ if (matchingPage != null)
+ {
+ // log selected dynamic page
+ if (log.isDebugEnabled())
+ {
+ log.debug("Selected "+contentType+" content
dynamic page, path=" + view.getManagedDynamicPage(matchingPage).getPath());
+ }
+ return matchingPage;
+ }
+ // select inheritable matching page
+ if (inheritableMatchingPage != null)
+ {
+ // log selected dynamic page
+ if (log.isDebugEnabled())
+ {
+ log.debug("Selected "+contentType+"
inheritable content dynamic page, path=" +
view.getManagedDynamicPage(inheritableMatchingPage).getPath());
+ }
+ return inheritableMatchingPage;
+ }
// select wildcard matching page
if (wildcardMatchingPage != null)
{
// log selected dynamic page
if (log.isDebugEnabled())
{
- log.debug("Selected "+contentType+" content
dynamic page with wildcard, path=" +
view.getManagedDynamicPage(wildcardMatchingPage).getPath());
+ log.debug("Selected "+contentType+" wildcard
content dynamic page, path=" +
view.getManagedDynamicPage(wildcardMatchingPage).getPath());
}
return wildcardMatchingPage;
}
@@ -1028,6 +1062,7 @@
// continue search with parent folder
contentRequestFolder =
(Folder)contentRequestFolder.getParent();
+ matchingContentRequestFolder = false;
}
}
Modified:
portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/test/java/org/apache/jetspeed/portalsite/TestPortalSite.java
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/test/java/org/apache/jetspeed/portalsite/TestPortalSite.java?rev=920472&r1=920471&r2=920472&view=diff
==============================================================================
---
portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/test/java/org/apache/jetspeed/portalsite/TestPortalSite.java
(original)
+++
portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/test/java/org/apache/jetspeed/portalsite/TestPortalSite.java
Mon Mar 8 19:33:26 2010
@@ -1911,10 +1911,25 @@
requestPageView = requestContext.getPage();
assertNotNull(requestPageView);
assertTrue(requestPageView instanceof DynamicPage);
+ assertEquals("matchdocpage.dpsml", requestPageView.getName());
+ assertEquals("/contentfolder/matchdocpage.dpsml",
extractFileSystemPathFromId(requestPageView.getId()));
+ assertNotNull(requestContext.getPageContentPath());
+ assertEquals("/contentfolder/document",
requestContext.getPageContentPath());
+
+ locator = new JetspeedProfileLocator();
+ locator.init(null, "/contentfolder/folder/document.doc");
+ locator.add("user", true, false, "user");
+ locators = new HashMap();
+ locators.put(ProfileLocator.PAGE_LOCATOR, locator);
+ requestContext = sessionContext.newRequestContext(locators);
+ assertNotNull(requestContext);
+ requestPageView = requestContext.getPage();
+ assertNotNull(requestPageView);
+ assertTrue(requestPageView instanceof DynamicPage);
assertEquals("docpage.dpsml", requestPageView.getName());
assertEquals("/contentfolder/docpage.dpsml",
extractFileSystemPathFromId(requestPageView.getId()));
assertNotNull(requestContext.getPageContentPath());
- assertEquals("/contentfolder/document",
requestContext.getPageContentPath());
+ assertEquals("/contentfolder/folder/document",
requestContext.getPageContentPath());
locator = new JetspeedProfileLocator();
locator.init(null, "/contentfolder/document.txt");
Added:
portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/test/resources/webapp/WEB-INF/pages/contentfolder/matchdocpage.dpsml
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/test/resources/webapp/WEB-INF/pages/contentfolder/matchdocpage.dpsml?rev=920472&view=auto
==============================================================================
---
portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/test/resources/webapp/WEB-INF/pages/contentfolder/matchdocpage.dpsml
(added)
+++
portals/jetspeed-2/portal/trunk/components/jetspeed-portal-site/src/test/resources/webapp/WEB-INF/pages/contentfolder/matchdocpage.dpsml
Mon Mar 8 19:33:26 2010
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+-->
+
+<dynamic-page id="matchdocpage" content-type="doc-type" inheritable="false"
+ xmlns="http://portals.apache.org/jetspeed"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://portals.apache.org/jetspeed
http://portals.apache.org/jetspeed-2/2.1/schemas/psml.xsd">
+
+ <title>/contentfolder/matchdocpage.dpsml</title>
+ <fragment id="fake" name="fake" type="fake"/>
+</dynamic-page>
Modified:
portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/page/DynamicPage.java
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/page/DynamicPage.java?rev=920472&r1=920471&r2=920472&view=diff
==============================================================================
---
portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/page/DynamicPage.java
(original)
+++
portals/jetspeed-2/portal/trunk/jetspeed-api/src/main/java/org/apache/jetspeed/om/page/DynamicPage.java
Mon Mar 8 19:33:26 2010
@@ -44,4 +44,20 @@
* @param contentType the name of the content type for the page
*/
void setContentType(String contentType);
+
+ /**
+ * Get inheritable flag that indicates whether this dynamic
+ * page can be inherited for child content pages.
+ *
+ * @return inheritable flag
+ */
+ boolean isInheritable();
+
+ /**
+ * Set inheritable flag that indicates whether this dynamic
+ * page can be inherited for child content pages.
+ *
+ * @param inheritable inheritable flag
+ */
+ void setInheritable(boolean inheritable);
}
Modified:
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/ddl-schema/phase2-schema.xml
URL:
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/ddl-schema/phase2-schema.xml?rev=920472&r1=920471&r2=920472&view=diff
==============================================================================
---
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/ddl-schema/phase2-schema.xml
(original)
+++
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/ddl-schema/phase2-schema.xml
Mon Mar 8 19:33:26 2010
@@ -187,6 +187,7 @@
<column name="PARENT_ID" type="INTEGER" required="true"/>
<column name="PATH" required="true" size="240" type="VARCHAR"/>
<column name="CONTENT_TYPE" size="40" type="VARCHAR"/>
+ <column name="IS_INHERITABLE" type="BOOLEANINT"/>
<column name="NAME" required="true" size="80" type="VARCHAR"/>
<column name="VERSION" size="40" type="VARCHAR"/>
<column name="TITLE" size="100" type="VARCHAR"/>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]