CategoryForm / TermWidget

* Die ausgewählten Kategorien werden nun auch in den Unterkategorien markiert

git-svn-id: https://svn.libreccm.org/ccm/trunk@867 8810af33-2d31-482b-a856-94f89814c4df
master
quasi 2011-04-20 08:48:32 +00:00
parent 4345698578
commit 481211fe25
363 changed files with 41918 additions and 254 deletions

View File

@ -18,7 +18,6 @@
*/ */
package com.arsdigita.cms.ui; package com.arsdigita.cms.ui;
import com.arsdigita.bebop.BoxPanel; import com.arsdigita.bebop.BoxPanel;
import com.arsdigita.bebop.ColumnPanel; import com.arsdigita.bebop.ColumnPanel;
import com.arsdigita.bebop.Container; import com.arsdigita.bebop.Container;
@ -38,18 +37,15 @@ import com.arsdigita.bebop.form.OptionGroup;
import com.arsdigita.bebop.form.SingleSelect; import com.arsdigita.bebop.form.SingleSelect;
import com.arsdigita.bebop.form.Submit; import com.arsdigita.bebop.form.Submit;
import com.arsdigita.bebop.parameters.BigDecimalParameter; import com.arsdigita.bebop.parameters.BigDecimalParameter;
import com.arsdigita.bebop.tree.TreeNode;
import com.arsdigita.bebop.util.SequentialMap; import com.arsdigita.bebop.util.SequentialMap;
import com.arsdigita.categorization.Category; import com.arsdigita.categorization.Category;
import com.arsdigita.categorization.CategoryCollection; import com.arsdigita.categorization.CategoryCollection;
import com.arsdigita.categorization.CategoryTreeModelLite;
import com.arsdigita.cms.CMS; import com.arsdigita.cms.CMS;
import com.arsdigita.cms.ContentItem; import com.arsdigita.cms.ContentItem;
import com.arsdigita.cms.ui.authoring.BasicItemForm; import com.arsdigita.cms.ui.authoring.BasicItemForm;
import com.arsdigita.cms.util.GlobalizationUtil; import com.arsdigita.cms.util.GlobalizationUtil;
import com.arsdigita.domain.DataObjectNotFoundException; import com.arsdigita.domain.DataObjectNotFoundException;
import com.arsdigita.kernel.ACSObject; import com.arsdigita.kernel.ACSObject;
import com.arsdigita.kernel.ui.DataQueryTreeNode;
import com.arsdigita.persistence.DataQuery; import com.arsdigita.persistence.DataQuery;
import com.arsdigita.persistence.OID; import com.arsdigita.persistence.OID;
import com.arsdigita.persistence.SessionManager; import com.arsdigita.persistence.SessionManager;
@ -61,7 +57,6 @@ import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedList;
import java.util.Map; import java.util.Map;
import java.util.SortedMap; import java.util.SortedMap;
import java.util.TooManyListenersException; import java.util.TooManyListenersException;
@ -82,15 +77,12 @@ import java.util.TreeMap;
* @version $Id: CategoryForm.java 903 2005-09-22 05:39:04Z apevec $ * @version $Id: CategoryForm.java 903 2005-09-22 05:39:04Z apevec $
*/ */
public abstract class CategoryForm extends Form public abstract class CategoryForm extends Form
implements FormProcessListener, FormValidationListener { implements FormProcessListener, FormValidationListener {
private RequestLocal m_assigned; private RequestLocal m_assigned;
private Submit m_assign, m_remove; private Submit m_assign, m_remove;
Label m_freeLabel, m_assignedLabel; Label m_freeLabel, m_assignedLabel;
private static final String SEPARATOR = ">"; private static final String SEPARATOR = ">";
public static final String FREE = "free"; public static final String FREE = "free";
public static final String ASSIGNED = "assigned"; public static final String ASSIGNED = "assigned";
public static final String ASSIGN = "assign"; public static final String ASSIGN = "assign";
@ -98,7 +90,6 @@ public abstract class CategoryForm extends Form
public static final int SELECT_WIDTH = 30; public static final int SELECT_WIDTH = 30;
public static final int SELECT_HEIGHT = 10; public static final int SELECT_HEIGHT = 10;
public static final String FILLER_OPTION = StringUtils.repeat("_", SELECT_WIDTH); public static final String FILLER_OPTION = StringUtils.repeat("_", SELECT_WIDTH);
private static final Logger s_log = Logger.getLogger(CategoryForm.class); private static final Logger s_log = Logger.getLogger(CategoryForm.class);
/** /**
@ -109,7 +100,7 @@ public abstract class CategoryForm extends Form
public CategoryForm(String name) { public CategoryForm(String name) {
super(name, new ColumnPanel(3)); super(name, new ColumnPanel(3));
ColumnPanel panel = (ColumnPanel)getPanel(); ColumnPanel panel = (ColumnPanel) getPanel();
panel.setBorder(false); panel.setBorder(false);
panel.setPadColor("#FFFFFF"); panel.setPadColor("#FFFFFF");
panel.setColumnWidth(1, "0%"); panel.setColumnWidth(1, "0%");
@ -120,27 +111,27 @@ public abstract class CategoryForm extends Form
// Create the request local // Create the request local
m_assigned = new RequestLocal() { m_assigned = new RequestLocal() {
public Object initialValue(PageState state) {
CategoryMap m = new CategoryMap(); public Object initialValue(PageState state) {
initAssignedCategories(state, m); CategoryMap m = new CategoryMap();
return m; initAssignedCategories(state, m);
} return m;
}; }
};
// Top row // Top row
m_freeLabel = new Label(GlobalizationUtil.globalize("cms.ui.item.categories.available"), false); m_freeLabel = new Label(GlobalizationUtil.globalize("cms.ui.item.categories.available"), false);
m_freeLabel.setFontWeight(Label.BOLD); m_freeLabel.setFontWeight(Label.BOLD);
add(m_freeLabel, ColumnPanel.LEFT); add(m_freeLabel, ColumnPanel.LEFT);
add(new Label(" ", false)); add(new Label(" ", false));
m_assignedLabel = new Label(GlobalizationUtil.globalize("cms.ui.item.categories.assigned"), false); m_assignedLabel = new Label(GlobalizationUtil.globalize("cms.ui.item.categories.assigned"), false);
m_assignedLabel.setFontWeight(Label.BOLD); m_assignedLabel.setFontWeight(Label.BOLD);
add(m_assignedLabel, ColumnPanel.LEFT); add(m_assignedLabel, ColumnPanel.LEFT);
// Middle Row // Middle Row
SingleSelect freeWidget = SingleSelect freeWidget = new SingleSelect(new BigDecimalParameter(FREE));
new SingleSelect(new BigDecimalParameter(FREE));
try { try {
freeWidget.addPrintListener(new FreePrintListener()); freeWidget.addPrintListener(new FreePrintListener());
} catch (TooManyListenersException e) { } catch (TooManyListenersException e) {
@ -181,11 +172,13 @@ public abstract class CategoryForm extends Form
m_assign.setSize(10); m_assign.setSize(10);
c.add(m_assign); c.add(m_assign);
} }
protected void addRemoveButton(Container c) { protected void addRemoveButton(Container c) {
m_remove = new Submit(REMOVE, "<<"); m_remove = new Submit(REMOVE, "<<");
m_remove.setSize(10); m_remove.setSize(10);
c.add(m_remove); c.add(m_remove);
} }
/** /**
* Set the caption of the unassigned categories label * Set the caption of the unassigned categories label
* *
@ -209,80 +202,79 @@ public abstract class CategoryForm extends Form
* @return a {@link CategoryMap} of all assigned categories * @return a {@link CategoryMap} of all assigned categories
*/ */
public CategoryMap getAssignedCategories(PageState s) { public CategoryMap getAssignedCategories(PageState s) {
return (CategoryMap)m_assigned.get(s); return (CategoryMap) m_assigned.get(s);
} }
// A print listener which populates the listbox with all // A print listener which populates the listbox with all
// unassigned categories, apart from result of getExcludedCategory() // unassigned categories, apart from result of getExcludedCategory()
// (if not null), and the root category. // (if not null), and the root category.
// Ordering is alphabetical based on qualified path, so entries are // Ordering is alphabetical based on qualified path, so entries are
// ordered like a tree with all nodes expanded. // ordered like a tree with all nodes expanded.
// Ideally ordering should be like an expanded tree but based on // Ideally ordering should be like an expanded tree but based on
// the sortkey order of the categories. However, I don't know // the sortkey order of the categories. However, I don't know
// if it would be possible to write a comparison function that // if it would be possible to write a comparison function that
// could do this efficiently, and I'm not even going to try // could do this efficiently, and I'm not even going to try
// chris.gilbert@westsussex.gov.uk // chris.gilbert@westsussex.gov.uk
// //
private class FreePrintListener implements PrintListener { private class FreePrintListener implements PrintListener {
public void prepare(PrintEvent e) { public void prepare(PrintEvent e) {
OptionGroup target = (OptionGroup) e.getTarget(); OptionGroup target = (OptionGroup) e.getTarget();
PageState state = e.getPageState(); PageState state = e.getPageState();
Category root = getRootCategory(state); Category root = getRootCategory(state);
if (root == null) { if (root == null) {
return; return;
} }
// exclude children of the excluded category (as per javadoc on // exclude children of the excluded category (as per javadoc on
// getExcludedCategory() method. This prevents attempts // getExcludedCategory() method. This prevents attempts
// to create circular category graph (which causes // to create circular category graph (which causes
// exception in Category during addMapping if not checked here // exception in Category during addMapping if not checked here
Category excludedCat = getExcludedCategory(state); Category excludedCat = getExcludedCategory(state);
CategoryMap excluded = new CategoryMap(); CategoryMap excluded = new CategoryMap();
if (excludedCat != null) if (excludedCat != null) {
{CategoryCollection excludedSubTree =getExcludedCategory(state).getDescendants(); CategoryCollection excludedSubTree = getExcludedCategory(state).getDescendants();
while (excludedSubTree.next()) { while (excludedSubTree.next()) {
excluded.add(excludedSubTree.getCategory()); excluded.add(excludedSubTree.getCategory());
} }
} }
CategoryMap assigned = getAssignedCategories(state); CategoryMap assigned = getAssignedCategories(state);
SortedMap sortedCats = new TreeMap(); SortedMap sortedCats = new TreeMap();
CategoryCollection children = root.getDescendants(); CategoryCollection children = root.getDescendants();
while (children.next()) { while (children.next()) {
Category cat = children.getCategory(); Category cat = children.getCategory();
sortedCats.put(cat.getQualifiedName(SEPARATOR, true),cat.getID().toString()); sortedCats.put(cat.getQualifiedName(SEPARATOR, true), cat.getID().toString());
} }
Iterator it = sortedCats.entrySet().iterator(); Iterator it = sortedCats.entrySet().iterator();
Map.Entry entry; Map.Entry entry;
String path; String path;
String id; String id;
boolean notExcluded; boolean notExcluded;
boolean notAlreadyAssigned; boolean notAlreadyAssigned;
boolean notRoot; boolean notRoot;
while (it.hasNext()) { while (it.hasNext()) {
entry = (Map.Entry)it.next(); entry = (Map.Entry) it.next();
path = (String) entry.getKey(); path = (String) entry.getKey();
id = (String) entry.getValue(); id = (String) entry.getValue();
notExcluded = (excluded == null || !excluded.containsKey(id)); notExcluded = (excluded == null || !excluded.containsKey(id));
notAlreadyAssigned = !assigned.containsKey(id); notAlreadyAssigned = !assigned.containsKey(id);
notRoot = !id.equals(root.getID().toString()); notRoot = !id.equals(root.getID().toString());
if (notExcluded && notAlreadyAssigned && notRoot) { if (notExcluded && notAlreadyAssigned && notRoot) {
target.addOption(new Option(id, path)); target.addOption(new Option(id, path));
} }
} }
addFillerOption(target); addFillerOption(target);
} }
} }
/** /**
* Populate a {@link CategoryMap} with all categories which are assigned to * Populate a {@link CategoryMap} with all categories which are assigned to
* the item. Child classes should override this method to do the right thing. * the item. Child classes should override this method to do the right thing.
@ -292,9 +284,7 @@ public abstract class CategoryForm extends Form
* <code>call map.addCategory(someCategory);</code> * <code>call map.addCategory(someCategory);</code>
* @param state The page state * @param state The page state
*/ */
protected abstract void initAssignedCategories( protected abstract void initAssignedCategories(PageState state, CategoryMap map);
PageState state, CategoryMap map
);
/** /**
* Assign a category, moving it from the list on the left * Assign a category, moving it from the list on the left
@ -355,16 +345,17 @@ public abstract class CategoryForm extends Form
} }
// Populates the "assigned categories" widget // Populates the "assigned categories" widget
@Deprecated
private class AssignedPrintListener implements PrintListener { private class AssignedPrintListener implements PrintListener {
public void prepare(PrintEvent e) { public void prepare(PrintEvent e) {
OptionGroup o = (OptionGroup)e.getTarget(); OptionGroup o = (OptionGroup) e.getTarget();
PageState state = e.getPageState(); PageState state = e.getPageState();
CategoryMap m = getAssignedCategories(state); CategoryMap m = getAssignedCategories(state);
if(!m.isEmpty()) { if (!m.isEmpty()) {
for (Iterator i = m.values().iterator(); i.hasNext(); ) { for (Iterator i = m.values().iterator(); i.hasNext();) {
Category c = (Category)i.next(); Category c = (Category) i.next();
o.addOption(new Option(c.getID().toString(), getCategoryPath(c))); o.addOption(new Option(c.getID().toString(), getCategoryPath(c)));
} }
} else { } else {
@ -381,16 +372,16 @@ public abstract class CategoryForm extends Form
FormData data = e.getFormData(); FormData data = e.getFormData();
BigDecimal id; BigDecimal id;
if(m_assign.isSelected(state)) { if (m_assign.isSelected(state)) {
id = (BigDecimal) data.get(FREE); id = (BigDecimal) data.get(FREE);
// Assign a new category // Assign a new category
try { try {
Category cat = new Category( Category cat = new Category(
new OID(Category.BASE_DATA_OBJECT_TYPE, id)); new OID(Category.BASE_DATA_OBJECT_TYPE, id));
if (!cat.canMap()) { if (!cat.canMap()) {
data.addError( data.addError(
(String) GlobalizationUtil.globalize( (String) GlobalizationUtil.globalize(
"cms.ui.need_category_map_privilege").localize()); "cms.ui.need_category_map_privilege").localize());
return; return;
} }
@ -402,16 +393,16 @@ public abstract class CategoryForm extends Form
throw new FormProcessException(ex); throw new FormProcessException(ex);
} }
} else if(m_remove.isSelected(state)) { } else if (m_remove.isSelected(state)) {
id = (BigDecimal) data.get(ASSIGNED); id = (BigDecimal) data.get(ASSIGNED);
// Unassign a category // Unassign a category
try { try {
Category cat = new Category( Category cat = new Category(
new OID(Category.BASE_DATA_OBJECT_TYPE, id)); new OID(Category.BASE_DATA_OBJECT_TYPE, id));
if (!cat.canMap()) { if (!cat.canMap()) {
data.addError( data.addError(
(String) GlobalizationUtil.globalize( (String) GlobalizationUtil.globalize(
"cms.ui.need_category_map_privilege").localize()); "cms.ui.need_category_map_privilege").localize());
return; return;
} }
@ -431,8 +422,8 @@ public abstract class CategoryForm extends Form
PageState state = e.getPageState(); PageState state = e.getPageState();
FormData data = e.getFormData(); FormData data = e.getFormData();
if(m_assign.isSelected(state)) { if (m_assign.isSelected(state)) {
if(data.get(FREE) == null) { if (data.get(FREE) == null) {
data.addError("Please select a category to assign"); data.addError("Please select a category to assign");
} else { } else {
// we need to make sure that no other item in this // we need to make sure that no other item in this
@ -442,12 +433,11 @@ public abstract class CategoryForm extends Form
// Assign a new category // Assign a new category
try { try {
Category cat = Category cat =
new Category(new OID(Category.BASE_DATA_OBJECT_TYPE, id)); new Category(new OID(Category.BASE_DATA_OBJECT_TYPE, id));
String url = getItemURL(state); String url = getItemURL(state);
if (url != null) { if (url != null) {
DataQuery query = SessionManager.getSession().retrieveQuery DataQuery query = SessionManager.getSession().retrieveQuery("com.arsdigita.categorization.getAllItemURLsForCategory");
("com.arsdigita.categorization.getAllItemURLsForCategory");
query.setParameter("categoryID", id); query.setParameter("categoryID", id);
query.addEqualsFilter("lower(url)", url.toLowerCase()); query.addEqualsFilter("lower(url)", url.toLowerCase());
@ -456,33 +446,32 @@ public abstract class CategoryForm extends Form
ACSObject item = getObject(state); ACSObject item = getObject(state);
Collection list = null; Collection list = null;
if (item instanceof ContentItem) { if (item instanceof ContentItem) {
list = BasicItemForm.getAllVersionIDs list = BasicItemForm.getAllVersionIDs((ContentItem) item);
((ContentItem)item);
} else { } else {
list = new ArrayList(); list = new ArrayList();
list.add(item.getID()); list.add(item.getID());
} }
BigDecimal itemID = null; BigDecimal itemID = null;
while (query.next()) { while (query.next()) {
itemID = (BigDecimal)query.get("itemID"); itemID = (BigDecimal) query.get("itemID");
if (!list.contains(itemID)) { if (!list.contains(itemID)) {
data.addError("There is already an item " + data.addError("There is already an item "
"with the url " + url + + "with the url " + url
" in the category " + + " in the category "
cat.getName()); + cat.getName());
break; break;
} }
} }
} }
} }
} catch (DataObjectNotFoundException ex) { } catch (DataObjectNotFoundException ex) {
s_log.error("Error processing category. Unable to find " + s_log.error("Error processing category. Unable to find "
"category with id " + id); + "category with id " + id);
throw new FormProcessException(ex); throw new FormProcessException(ex);
} }
} }
} else if(m_remove.isSelected(state)) { } else if (m_remove.isSelected(state)) {
if(data.get(ASSIGNED) == null) { if (data.get(ASSIGNED) == null) {
data.addError("Please select a category to remove"); data.addError("Please select a category to remove");
} }
} }
@ -504,8 +493,8 @@ public abstract class CategoryForm extends Form
boolean isFirst = true; boolean isFirst = true;
while(ancestors.next()) { while (ancestors.next()) {
if ( !isFirst ) { if (!isFirst) {
s.append(SEPARATOR); s.append(SEPARATOR);
} }
s.append(ancestors.getCategory().getName()); s.append(ancestors.getCategory().getName());
@ -529,7 +518,4 @@ public abstract class CategoryForm extends Form
super.put(c.getID().toString(), c); super.put(c.getID().toString(), c);
} }
} }
} }

View File

@ -58,7 +58,6 @@ import com.arsdigita.persistence.OID;
* *
* *
*/ */
// this class has been abstracted out from the original cms specific category form // this class has been abstracted out from the original cms specific category form
// in ccm-cms // in ccm-cms
public abstract class ACSObjectCategoryForm extends Form { public abstract class ACSObjectCategoryForm extends Form {
@ -66,15 +65,11 @@ public abstract class ACSObjectCategoryForm extends Form {
private Widget m_category; private Widget m_category;
private SaveCancelSection m_buttons; private SaveCancelSection m_buttons;
protected abstract ACSObject getObject(PageState state); protected abstract ACSObject getObject(PageState state);
public ACSObjectCategoryForm(BigDecimalParameter root, public ACSObjectCategoryForm(BigDecimalParameter root,
StringParameter mode, StringParameter mode,
Widget categoryWidget) { Widget categoryWidget) {
super("category", new BoxPanel(BoxPanel.VERTICAL)); super("category", new BoxPanel(BoxPanel.VERTICAL));
@ -86,55 +81,60 @@ public abstract class ACSObjectCategoryForm extends Form {
add(m_buttons); add(m_buttons);
addInitListener(new FormInitListener() { addInitListener(new FormInitListener() {
public void init(FormSectionEvent ev)
@Override
public void init(FormSectionEvent ev)
throws FormProcessException { throws FormProcessException {
PageState state = ev.getPageState(); PageState state = ev.getPageState();
ACSObject object = getObject(state); ACSObject object = getObject(state);
List ids = new ArrayList(); List ids = new ArrayList();
CategoryCollection cats = new CategorizedObject(object).getParents(); CategoryCollection cats = new CategorizedObject(object).getParents();
while (cats.next()) { while (cats.next()) {
ids.add(cats.getCategory().getID()); ids.add(cats.getCategory().getID());
}
m_category.setValue(state,
ids.toArray(new BigDecimal[ids.size()]));
} }
});
m_category.setValue(state,
ids.toArray(new BigDecimal[ids.size()]));
}
});
addProcessListener(new FormProcessListener() { addProcessListener(new FormProcessListener() {
public void process(FormSectionEvent ev)
@Override
public void process(FormSectionEvent ev)
throws FormProcessException { throws FormProcessException {
PageState state = ev.getPageState(); PageState state = ev.getPageState();
ACSObject object = getObject(state); ACSObject object = getObject(state);
BigDecimal[] ids = (BigDecimal[])m_category.getValue(state); BigDecimal[] ids = (BigDecimal[]) m_category.getValue(state);
for (int i = 0 ; i < ids.length ; i++) { for (int i = 0; i < ids.length; i++) {
Category cat = (Category) Category cat = (Category) DomainObjectFactory.newInstance(
DomainObjectFactory.newInstance( new OID(Category.BASE_DATA_OBJECT_TYPE,
new OID(Category.BASE_DATA_OBJECT_TYPE, ids[i]));
ids[i]));
cat.addChild(object); cat.addChild(object);
}
fireCompletionEvent(state);
} }
});
fireCompletionEvent(state);
}
});
addSubmissionListener(new FormSubmissionListener() { addSubmissionListener(new FormSubmissionListener() {
public void submitted(FormSectionEvent ev)
@Override
public void submitted(FormSectionEvent ev)
throws FormProcessException { throws FormProcessException {
PageState state = ev.getPageState(); PageState state = ev.getPageState();
if (m_buttons.getCancelButton().isSelected(state)) { if (m_buttons.getCancelButton().isSelected(state)) {
fireCompletionEvent(state); fireCompletionEvent(state);
throw new FormProcessException("cancelled"); throw new FormProcessException("cancelled");
}
} }
}); }
});
} }
} }

View File

@ -1,5 +1,6 @@
package com.arsdigita.london.terms.ui; package com.arsdigita.london.terms.ui;
import com.arsdigita.bebop.FormData;
import java.math.BigDecimal; import java.math.BigDecimal;
// import java.util.Iterator; // import java.util.Iterator;
// import java.util.Map; // import java.util.Map;
@ -10,11 +11,17 @@ import org.apache.log4j.Logger;
import com.arsdigita.bebop.Page; import com.arsdigita.bebop.Page;
import com.arsdigita.bebop.PageState; import com.arsdigita.bebop.PageState;
import com.arsdigita.bebop.SimpleComponent; import com.arsdigita.bebop.SimpleComponent;
import com.arsdigita.bebop.parameters.ParameterData;
import com.arsdigita.bebop.parameters.StringParameter; import com.arsdigita.bebop.parameters.StringParameter;
import com.arsdigita.categorization.Category; import com.arsdigita.categorization.Category;
import com.arsdigita.domain.DomainObjectFactory; import com.arsdigita.domain.DomainObjectFactory;
import com.arsdigita.persistence.OID; import com.arsdigita.persistence.OID;
import com.arsdigita.util.Assert;
import com.arsdigita.xml.Element; import com.arsdigita.xml.Element;
import java.util.Arrays;
import java.util.HashSet;
import java.util.StringTokenizer;
import javax.servlet.http.HttpSession;
/** /**
* Generate part of the category tree. Used by Assign Category authoring step. * Generate part of the category tree. Used by Assign Category authoring step.
@ -27,9 +34,9 @@ import com.arsdigita.xml.Element;
*/ */
public class CategorySubtree extends SimpleComponent { public class CategorySubtree extends SimpleComponent {
StringParameter selectedCatsparam = new StringParameter("selectedCats");
StringParameter nodeIDparam = new StringParameter("nodeID"); StringParameter nodeIDparam = new StringParameter("nodeID");
private static Logger s_log = Logger.getLogger(CategorySubtree.class);
private static Logger s_log = Logger.getLogger(CategorySubtree.class);
/** /**
* *
@ -39,7 +46,7 @@ public class CategorySubtree extends SimpleComponent {
public void register(Page p) { public void register(Page p) {
super.register(p); super.register(p);
p.addGlobalStateParam(nodeIDparam); p.addGlobalStateParam(nodeIDparam);
p.addGlobalStateParam(selectedCatsparam);
} }
/** /**
@ -50,15 +57,23 @@ public class CategorySubtree extends SimpleComponent {
@Override @Override
public void generateXML(PageState state, Element p) { public void generateXML(PageState state, Element p) {
String node = (String)state.getValue(nodeIDparam); String node = (String) state.getValue(nodeIDparam);
s_log.debug("selected node = " + node); HashSet ids = new HashSet();
String[] pathElements = StringUtils.split(node, "-"); if (((String) state.getValue(selectedCatsparam)) != null) {
StringTokenizer values = new StringTokenizer((String) state.getValue(selectedCatsparam), ",");
while(values.hasMoreTokens()) {
ids.add(new BigDecimal(values.nextToken().trim()));
}
}
Category root = (Category) DomainObjectFactory.newInstance(new OID( s_log.debug("selected node = " + node);
String[] pathElements = StringUtils.split(node, "-");
Category root = (Category) DomainObjectFactory.newInstance(new OID(
Category.BASE_DATA_OBJECT_TYPE, Category.BASE_DATA_OBJECT_TYPE,
new BigDecimal(pathElements[pathElements.length - 1]))); new BigDecimal(pathElements[pathElements.length - 1])));
s_log.debug("generating subtree for cat " + root.getID()); s_log.debug("generating subtree for cat " + root.getID());
TermWidget.generateSubtree(p, root); TermWidget.generateSubtree(p, root, ids);
} }
} }

View File

@ -16,10 +16,10 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* *
*/ */
package com.arsdigita.london.terms.ui; package com.arsdigita.london.terms.ui;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
@ -71,45 +71,46 @@ public class TermWidget extends Widget {
private ACSObjectCategoryPicker m_picker; private ACSObjectCategoryPicker m_picker;
public TermWidget(StringParameter mode, ACSObjectCategoryPicker picker) { public TermWidget(StringParameter mode, ACSObjectCategoryPicker picker) {
super(new ArrayParameter(new BigDecimalParameter("category"))); super(new ArrayParameter(new BigDecimalParameter("category")));
m_mode = mode; m_mode = mode;
m_picker = picker; m_picker = picker;
} }
@Override
protected String getType() { protected String getType() {
return "category"; return "category";
} }
@Override
public boolean isCompound() { public boolean isCompound() {
return false; return false;
} }
protected void generateWidget(PageState state, @Override
Element parent) { protected void generateWidget(PageState state, Element parent) {
Domain domain = m_picker.getDomain(state); Domain domain = m_picker.getDomain(state);
Element widget = parent.newChildElement("cms:categoryWidget", Element widget = parent.newChildElement("cms:categoryWidget",
CMS.CMS_XML_NS); CMS.CMS_XML_NS);
exportAttributes(widget); exportAttributes(widget);
widget.addAttribute("mode", (String)state.getValue(m_mode)); widget.addAttribute("mode", (String) state.getValue(m_mode));
widget.addAttribute("name", getName()); widget.addAttribute("name", getName());
Set ids = new HashSet(); Set ids = new HashSet();
BigDecimal[] values = (BigDecimal[]) getValue(state);
BigDecimal[] values = (BigDecimal[])getValue(state);
if (values != null) { if (values != null) {
for (int i = 0 ; i < values.length ; i++) { ids.addAll(Arrays.asList(values));
ids.add(values[i]);
}
} }
String selectedCats = ids.toString();
widget.addAttribute("selectedCats", selectedCats.substring(1, selectedCats.length() - 1));
// only root terms at first, the rest is loaded on-demand via AJAX // only root terms at first, the rest is loaded on-demand via AJAX
DomainCollection terms = domain.getRootTerms(); DomainCollection terms = domain.getRootTerms();
// DomainCollection terms = domain.getTerms();
terms.addPath("model.parents.link.sortKey"); terms.addPath("model.parents.link.sortKey");
terms.addPath("model.parents.id"); terms.addPath("model.parents.id");
terms.addPath("domain.key"); terms.addPath("domain.key");
@ -129,8 +130,7 @@ public class TermWidget extends Widget {
List roots = new LinkedList(); List roots = new LinkedList();
while (terms.next()) { while (terms.next()) {
Term term = (Term) terms.getDomainObject(); Term term = (Term) terms.getDomainObject();
roots.add(new TermSortKeyPair roots.add(new TermSortKeyPair(term, (BigDecimal) terms.get("model.parents.link.sortKey")));
(term,(BigDecimal)terms.get("model.parents.link.sortKey")));
} }
Element el = generateCategory(widget, domain.getModel(), ids, null); Element el = generateCategory(widget, domain.getModel(), ids, null);
@ -146,7 +146,7 @@ public class TermWidget extends Widget {
ContentItem item = CMS.getContext().getContentItem(); ContentItem item = CMS.getContext().getContentItem();
List<RankedTerm> autoTerms = indexer.index(item, 16); List<RankedTerm> autoTerms = indexer.index(item, 16);
Element autoCategories = widget.newChildElement("cms:autoCategories", CMS.CMS_XML_NS); Element autoCategories = widget.newChildElement("cms:autoCategories", CMS.CMS_XML_NS);
for (Iterator<RankedTerm> i = autoTerms.iterator(); i.hasNext(); ) { for (Iterator<RankedTerm> i = autoTerms.iterator(); i.hasNext();) {
RankedTerm nextRankedTerm = i.next(); RankedTerm nextRankedTerm = i.next();
Category cat = nextRankedTerm.getTerm().getModel(); Category cat = nextRankedTerm.getTerm().getModel();
if (!ids.contains(cat.getID())) { if (!ids.contains(cat.getID())) {
@ -166,14 +166,14 @@ public class TermWidget extends Widget {
} }
if (Terms.getConfig().ajaxExpandAllBranches()) { if (Terms.getConfig().ajaxExpandAllBranches()) {
// add attribute to the parent node, so that in stylesheet // add attribute to the parent node, so that in stylesheet
// we can look for any ancestor with this attribute (can't // we can look for any ancestor with this attribute (can't
// add attribute to categoryWidget element as that is not // add attribute to categoryWidget element as that is not
// visible when subbranches are transformed) // visible when subbranches are transformed)
el.addAttribute("expand", "all" ); el.addAttribute("expand", "all" );
} }
for (Iterator i=roots.iterator(); i.hasNext(); ) { for (Iterator i = roots.iterator(); i.hasNext();) {
TermSortKeyPair pair = (TermSortKeyPair) i.next(); TermSortKeyPair pair = (TermSortKeyPair) i.next();
Term term = pair.getTerm(); Term term = pair.getTerm();
BigDecimal sortKey = pair.getSortKey(); BigDecimal sortKey = pair.getSortKey();
@ -183,9 +183,9 @@ public class TermWidget extends Widget {
} }
public static Element generateCategory(Element parent, public static Element generateCategory(Element parent,
Category cat, Category cat,
Set selected, Set selected,
BigDecimal sortKey) { BigDecimal sortKey) {
Element el = parent.newChildElement("cms:category", CMS.CMS_XML_NS); Element el = parent.newChildElement("cms:category", CMS.CMS_XML_NS);
el.addAttribute("id", XML.format(cat.getID())); el.addAttribute("id", XML.format(cat.getID()));
@ -200,27 +200,34 @@ public class TermWidget extends Widget {
// sort order attribute added to every node so that we can // sort order attribute added to every node so that we can
// correctly transform xml fragments returned by ajax // correctly transform xml fragments returned by ajax
el.addAttribute("order", ContentSection.getConfig().getCategoryTreeOrder()); el.addAttribute("order", ContentSection.getConfig().getCategoryTreeOrder());
el.addAttribute("genCat", "true");
StringBuffer path = new StringBuffer(parent.getAttribute("fullname")); StringBuilder path = new StringBuilder(parent.getAttribute("fullname"));
if (path.length() > 0) path.append(" > "); if (path.length() > 0) {
path.append(" > ");
}
path.append(cat.getName()); path.append(cat.getName());
el.addAttribute("fullname", path.toString()); el.addAttribute("fullname", path.toString());
// need to uniquely identify each node in polyhierarchical trees // need to uniquely identify each node in polyhierarchical trees
// so that expand/contract is applied to the correct node by // so that expand/contract is applied to the correct node by
// javascript getElementByID function // javascript getElementByID function
StringBuffer nodeID = new StringBuffer(parent.getAttribute("node-id")); StringBuilder nodeID = new StringBuilder(parent.getAttribute("node-id"));
if (nodeID.length() > 0) nodeID.append("-"); if (nodeID.length() > 0) {
nodeID.append(cat.getID()); nodeID.append("-");
el.addAttribute("node-id", nodeID.toString());
}
nodeID.append(cat.getID());
el.addAttribute("node-id", nodeID.toString());
return el; return el;
} }
public static Element generateTerm(Element parent, public static Element generateTerm(Element parent,
Term term, Term term,
Set selected, Set selected,
BigDecimal sortKey) { BigDecimal sortKey) {
Category cat = term.getModel(); Category cat = term.getModel();
Element el = generateCategory(parent, cat, selected, sortKey); Element el = generateCategory(parent, cat, selected, sortKey);
@ -230,14 +237,14 @@ public class TermWidget extends Widget {
} }
private static void generateRootTerm(Element parent, private static void generateRootTerm(Element parent,
Term term, Term term,
Set selected, Set selected,
BigDecimal sortKey) { BigDecimal sortKey) {
Element el = generateTerm(parent, term, selected, sortKey); Element el = generateTerm(parent, term, selected, sortKey);
el.addAttribute("root","1"); el.addAttribute("root", "1");
} }
public static void generateSubtree(Element parent, Category root) { public static void generateSubtree(Element parent, Category root, Set ids) {
DataCollection terms = SessionManager.getSession().retrieve( DataCollection terms = SessionManager.getSession().retrieve(
Term.BASE_DATA_OBJECT_TYPE); Term.BASE_DATA_OBJECT_TYPE);
terms.addEqualsFilter("model.roTransParents.id", root.getID()); terms.addEqualsFilter("model.roTransParents.id", root.getID());
@ -245,8 +252,7 @@ public class TermWidget extends Widget {
Map children = new HashMap(); Map children = new HashMap();
while (terms.next()) { while (terms.next()) {
Term term = (Term) DomainObjectFactory.newInstance(terms Term term = (Term) DomainObjectFactory.newInstance(terms.getDataObject());
.getDataObject());
BigDecimal parentID = (BigDecimal) terms.get("model.parents.id"); BigDecimal parentID = (BigDecimal) terms.get("model.parents.id");
List childList = (List) children.get(parentID); List childList = (List) children.get(parentID);
@ -255,24 +261,20 @@ public class TermWidget extends Widget {
children.put(parentID, childList); children.put(parentID, childList);
} }
childList.add(new TermSortKeyPair(term, (BigDecimal) terms childList.add(new TermSortKeyPair(term, (BigDecimal) terms.get("model.parents.link.sortKey")));
.get("model.parents.link.sortKey")));
} }
// XXX for isSelected
Set ids = new HashSet();
Element el = generateCategory(parent, root, ids, null); Element el = generateCategory(parent, root, ids, null);
el.addAttribute("fullname", root.getName()); el.addAttribute("fullname", root.getName());
el.addAttribute("node-id", root.getID().toString()); el.addAttribute("node-id", root.getID().toString());
el.addAttribute("order", ContentSection.getConfig().getCategoryTreeOrder()); el.addAttribute("order", ContentSection.getConfig().getCategoryTreeOrder());
if (Terms.getConfig().ajaxExpandAllBranches()) { if (Terms.getConfig().ajaxExpandAllBranches()) {
// recognisable attribute has to be in the XML for each snippet that is transformed, // recognisable attribute has to be in the XML for each snippet that is transformed,
// hence add it to the parent // hence add it to the parent
el.addAttribute("expand", "all" ); el.addAttribute("expand", "all" );
} }
List roots = (List) children.get(root.getID()); List roots = (List) children.get(root.getID());
if (null != roots) { if (null != roots) {
Iterator i = roots.iterator(); Iterator i = roots.iterator();
while (i.hasNext()) { while (i.hasNext()) {
@ -286,10 +288,10 @@ public class TermWidget extends Widget {
} }
private static void generateTermWithChildren(Element parent, private static void generateTermWithChildren(Element parent,
Term term, Term term,
Set selected, Set selected,
BigDecimal sortKey, BigDecimal sortKey,
Map children) { Map children) {
Category cat = term.getModel(); Category cat = term.getModel();
Element el = generateCategory(parent, cat, selected, sortKey); Element el = generateCategory(parent, cat, selected, sortKey);
@ -304,7 +306,7 @@ public class TermWidget extends Widget {
Term child = pair.getTerm(); Term child = pair.getTerm();
BigDecimal childSortKey = pair.getSortKey(); BigDecimal childSortKey = pair.getSortKey();
// either generate next level down, or get all levels below current // either generate next level down, or get all levels below current
if (Terms.getConfig().ajaxExpandAllBranches()) { if (Terms.getConfig().ajaxExpandAllBranches()) {
generateTerm(el, child, selected, childSortKey); generateTerm(el, child, selected, childSortKey);
@ -321,6 +323,7 @@ public class TermWidget extends Widget {
} }
private static class TermSortKeyPair { private static class TermSortKeyPair {
private Term m_term; private Term m_term;
private BigDecimal m_sortKey; private BigDecimal m_sortKey;
@ -328,9 +331,11 @@ public class TermWidget extends Widget {
m_term = term; m_term = term;
m_sortKey = sortKey; m_sortKey = sortKey;
} }
public Term getTerm() { public Term getTerm() {
return m_term; return m_term;
} }
public BigDecimal getSortKey() { public BigDecimal getSortKey() {
return m_sortKey; return m_sortKey;
} }

View File

@ -0,0 +1,6 @@
2007-08-06:
./ccm-shp-aplaws/src/WEB-INF/content-types/c...types/aplaws-mparticle-item.jsp
<define:page name="itemPage" application="content changed to
<define:page name="itemPage" application="content-section"
as is all other contenttyp jsp pages. Requires corresponding modification
in the theme!

View File

@ -0,0 +1,48 @@
<?xml version="1.0"?>
<ccm:application xmlns:ccm="http://ccm.redhat.com/ccm-project"
name="ccm-zes-aplaws"
prettyName="ZeS-APLAWS"
version="6.6.0"
release="1"
webapp="ROOT">
<ccm:dependencies>
<ccm:requires name="ccm-core" version="6.6.0" relation="ge"/>
<ccm:requires name="ccm-cms" version="6.6.0" relation="ge"/>
<ccm:requires name="ccm-ldn-subsite" version="6.6.0" relation="ge"/>
<ccm:requires name="ccm-portalworkspace" version="6.6.1" relation="ge"/>
<ccm:requires name="ccm-ldn-terms" version="6.6.0" relation="ge"/>
<!-- not required anymore (2007-06-09)
<ccm:requires name="ccm-ldn-dublin" version="6.6.0" relation="ge"/>
-->
<ccm:requires name="ccm-ldn-navigation" version="6.6.0" relation="ge"/>
<ccm:requires name="ccm-ldn-search" version="6.6.0" relation="ge"/>
</ccm:dependencies>
<ccm:directories>
<ccm:directory name="pdl"/>
<ccm:directory name="src"/>
</ccm:directories>
<ccm:contacts>
<ccm:contact uri="http://www.redhat.com/software/rhea" type="website"/>
<ccm:contact uri="mailto:rhea@redhat.com" type="support"/>
</ccm:contacts>
<ccm:description>
Service module which tailors the aplaws software to a specific purpose
and/or a specific site.
- setting up a categorization / terms system (cf. load.java)
- integrate custom spezific jsp's
- setting up custom specific configuration parameters (cf. the bundles)
- overwrite default classes by custom specific ones (cf. src/.../aplaws)
- provide a default theme, which meets accessibility requirements and
overwrites the default, table based design (cf. web/.../themes)
This modules tailors APLAWS for use at the Centre for Social Policy
Research (Zentrum fuer Sozialpolitik - ZeS), University of Bremen, Germany.
APLAWS is a collaboration and content management system which is based upon
the Red Hat Web Application Framework, which is a platform for writing
database-backed web applications in Java.
</ccm:description>
</ccm:application>

View File

@ -0,0 +1,9 @@
* Thu Sep 22 2005 Alan Pevec <apevec@redhat.com>
- Build all APLAWS+ bundles from the common set of templates.
* Mon Feb 21 2005 Alan Pevec <apevec@redhat.com>
- Requires applications.
* Mon Jan 26 2004 Daniel Berrange <berrange@redhat.com>
- Initial build.

View File

@ -0,0 +1,4 @@
BUNDLE_NAME=aplaws-plus-zes-devel
BUNDLE_PRETTY_NAME="APLAWS+ ZeS Devel Bundle"
VERSION=1.0.9devel
RELEASE=1

View File

@ -0,0 +1,81 @@
# ZeS devel application.cfg
# Main apps
ccm-core
ccm-cms
# Content assets
ccm-cms-assets-fileattachment
ccm-cms-assets-imagestep
ccm-cms-assets-notes
ccm-cms-assets-relatedlink
# Content types
ccm-cms-types-address
# -- ccm-cms-types-agenda
ccm-cms-types-article
ccm-cms-types-bookmark
ccm-cms-types-contact
ccm-cms-types-event
ccm-cms-types-faqitem
ccm-cms-types-filestorageitem
ccm-cms-types-formitem
ccm-cms-types-formsectionitem
ccm-cms-types-glossaryitem
# -- ccm-cms-types-htmlform
# -- ccm-cms-types-inlinesite
# -- ccm-cms-types-job
# -- ccm-cms-types-legalnotice
ccm-cms-types-member
# -- ccm-cms-types-minutes
# -- ccm-cms-types-motditem
ccm-cms-types-mparticle
ccm-cms-types-newsitem
# -- ccm-cms-types-organization
ccm-cms-types-person
# -- ccm-cms-types-pressrelease
# -- ccm-cms-types-researchnetwork
# -- ccm-cms-types-service
# ccm-cms-types-survey
ccm-cms-types-siteproxy
# -- xmlfeed wird moeglicherweise ebenfalls nicht gebraucht
ccm-cms-types-xmlfeed
# Applications
# ------------
# -- ccm-auth-http
# -- ccm-bookmarks
# -- ccm-docmngr ## temp., produces errors in build
# -- ccm-formbuilder-pdf
ccm-forum
# -- ccm-forum-categorised
ccm-portalworkspace
# -- ccm-simplesurvey
ccm-themedirector
ccm-user-preferences
# -- ccm-weblog
# -- ccm-webpage
# ldn extensions
# --------------
# -- ccm-ldn-aplaws
# -- ccm-ldn-atoz
# -- ccm-ldn-dublin
# -- ccm-ldn-exporter
# -- ccm-ldn-freeform
# -- ccm-ldn-importer
ccm-ldn-navigation
ccm-ldn-rss
ccm-ldn-search
ccm-ldn-shortcuts
ccm-ldn-subsite
ccm-ldn-terms
ccm-ldn-util
# sci extensions
# --------------
ccm-cms-dabinimporter
ccm-sci-publications
ccm-sci-types-organization
# integration layer
ccm-zes-aplaws

View File

@ -0,0 +1,145 @@
# ZeS devel bundle integration.properties
#
waf.bebop.base_page=com.arsdigita.aplaws.ui.SimplePage
#
; dhtml editor to use (system wide)
; Xinha is default
; default: Xinha editor & src=/assets/xinha/XinhaLoader.js
#waf.bebop.dhtml_editor=FCKeditor
waf.categorization.show_internal_name=true
waf.categorization.supported_languages=de,en
waf.dispatcher.default_expiry=3600
;
waf.kernel.data_permission_check_enabled=false
waf.kernel.primary_user_identifier=email
; if you activate screen_name, forum loader doesn't work.
; waf.kernel.primary_user_identifier=screen_name
waf.kernel.supported_languages=de,en
; security.properties:
waf.auto_registration_on=false
# MOVED to ui.Config
#waf.pagemap.root=navigation/
#waf.pagemap.workspace=navigation/
#waf.pagemap.login_redirect=content/content-center-redirect.jsp
; Searches for localized style sheet (among others)
waf.templating.stylesheet_resolver=com.arsdigita.templating.PatternStylesheetResolver
waf.templating.stylesheet_paths=/WEB-INF/resources/aplaws-stylesheet-paths.txt
core.ui.pagemap.root_page_url=navigation/
core.ui.pagemap.workspace_url=navigation/
core.ui.pagemap.user_redirect_url=content/content-center-redirect.jsp
; workflow configuration
waf.workflow.simple.alerts_enabled=true
waf.workflow.simple.alerts_sender=root@localhost.localdomain
; Configures the xml processing
waf.xml.xsl_transformer=xalan
waf.xml.activate_full_date_formatter=true
# ccm-cms parameters
com.arsdigita.cms.category_authoring_add_form=com.arsdigita.aplaws.ui.ItemCategoryPicker
com.arsdigita.cms.default_folder_template_path=/default/aplaws-folder.jsp
com.arsdigita.cms.default_item_template_path=/default/aplaws-item.jsp
com.arsdigita.cms.default_template_resolver_class=com.arsdigita.london.subsite.dispatcher.SubsiteItemTemplateResolver
; Configure dhtml editor for use in cms content-center
; Xinha is default and should work out of the box
;com.arsdigita.cms.dhtml_editor_config=XinhaConfig,/assets/xinha/XinhaConfig.js
; as a temporary measure a different configuration file which includes a link selection box for CCM items
; and CCM images should be specified:
com.arsdigita.cms.dhtml_editor_config=XinhaConfig,/assets/xinha/CCMcmsXinhaConfig.js
com.arsdigita.cms.dhtml_editor_plugins=
com.arsdigita.cms.disable_item_pfs=true
com.arsdigita.cms.hide_admin_tabs=true
com.arsdigita.cms.hide_folder_index_checkbox=true
com.arsdigita.cms.hide_launch_date=true
com.arsdigita.cms.hide_templates_tab=true
com.arsdigita.cms.hide_timezone=true
com.arsdigita.cms.hide_udct_ui=true
com.arsdigita.cms.use_section_categories=false
com.arsdigita.cms.use_streamlined_creation=true
# ccm-cms-types-event parameters
com.arsdigita.cms.contenttypes.event.hide_cost=true
com.arsdigita.cms.contenttypes.event.hide_link_to_map=true
com.arsdigita.cms.contenttypes.event.use_html_date_description=false
com.arsdigita.cms.contenttypes.event.start_year=2000
com.arsdigita.cms.contenttypes.event.end_year_delta=5
# ccm-cms-types-newsitem parameters
com.arsdigita.cms.contenttypes.newsitem.hide_homepage=true
com.arsdigita.cms.contenttypes.newsitem.start_year=2000
com.arsdigita.cms.contenttypes.newsitem.end_year_delta=5
# ?? Where are these used?
com.arsdigita.cms.contenttypes.mparticle.template=/WEB-INF/content-types/com/arsdigita/cms/contenttypes/aplaws-mparticle-item.jsp
com.arsdigita.cms.contenttypes.siteproxy.defaulttemplate=/WEB-INF/content-types/com/arsdigita/cms/contenttypes/aplaws-siteproxy-item.jsp
# Forum application
com.arsdigita.forum.show_new_tabs=true
com.arsdigita.forum.use_wysiwyg_editor=true
com.arsdigita.forum.allow_quick_finish=true
com.arsdigita.forum.disable_page_caching=true
# ccm-ldn-navigation application
com.arsdigita.london.navigation.category_menu_show_grand_children=false
com.arsdigita.london.navigation.default_cat_root_path=/navigation/
com.arsdigita.london.navigation.default_template=/packages/navigation/templates/zes-default.jsp
# ccm-ldn-search application
com.arsdigita.london.search.show_sponsored_links=true
# ccm-ldn-subsite application
com.arsdigita.london.subsite.root_category_picker=com.arsdigita.london.terms.ui.RootCategoryPicker
# ccm-ldn-themedirector application
themedirector.default_theme_context=
themedirector.default_theme_manifest=ccm-zes-aplaws.web.mf
themedirector.default_theme_path=themes/static/aplaws-generic
themedirector.file_extensions=bmp css gif jpeg jpg js png xml xsl
# =============================================================================================
# runtime specific configurations
waf.admin.email=webmaster@ccm.uni-bremen.de
waf.admin.name.given=CCM
waf.admin.name.family=Administrator
waf.admin.password=nge2015
waf.admin.password.question=12345
waf.admin.password.answer=6
waf.runtime.jdbc_url=jdbc\:postgresql\://localhost/ccm?user\=ccm&password\=ccm
waf.runtime.jdbc_pool_size=30
waf.web.server=localhost\:8080
# =============================================================================================
# devel specific configurations
waf.debug=true
waf.bebop.fancy_xsl_errors=true

View File

@ -0,0 +1,558 @@
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">
<web-app>
<display-name>CCM ZeS</display-name>
<description>Content and Collaboration Management</description>
<!-- path and filename of the log4j user accessible config file
WEB-INF/conf/log4j.properties is the built-in default value -->
<context-param>
<param-name>log4j-conf-file</param-name>
<param-value>WEB-INF/conf/log4j.properties</param-value>
</context-param>
<!-- Require secure connection by redirect to host-port part
of parameter waf.web.secure_server
NOT USED with ZeS
<filter>
<filter-name>secured</filter-name>
<filter-class>com.arsdigita.web.SecureFilter</filter-class>
</filter>
-->
<!-- Initialize Profiler timers
NOT USED with ZeS standard / production
<filter>
<filter-name>profiler</filter-name>
<filter-class>com.arsdigita.profiler.ProfilerFilter</filter-class>
</filter>
-->
<filter>
<filter-name>shortcuts</filter-name>
<filter-class>com.arsdigita.london.shortcuts.ShortcutFilter</filter-class>
</filter>
<filter>
<filter-name>subsite</filter-name>
<filter-class>com.arsdigita.london.subsite.SubsiteFilter</filter-class>
</filter>
<!-- NOT USED HERE
<filter-mapping>
<filter-name>secured</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>profiler</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
-->
<filter-mapping>
<filter-name>subsite</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>shortcuts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Context Listener
required and used to initialize the runtime environment before any other
task is performed or any servlet initialized.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<listener>
<listener-class>com.arsdigita.web.CCMApplicationContextListener</listener-class>
</listener>
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
BASE SERVLET DECLARATIONS SECTION
basically requirred by ccm-core
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<servlet>
<servlet-name>reg</servlet-name>
<servlet-class>com.arsdigita.web.ContextRegistrationServlet</servlet-class>
<init-param>
<param-name>uri</param-name>
<param-value>/</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>legacy-dispatcher</servlet-name>
<servlet-class>com.arsdigita.sitenode.SiteNodeDispatcher</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet>
<servlet-name>ccm-dispatcher</servlet-name>
<servlet-class>com.arsdigita.web.DispatcherServlet</servlet-class>
<init-param>
<param-name>fallback-servlet</param-name>
<param-value>legacy-dispatcher</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet>
<servlet-name>legacy-adapter</servlet-name>
<servlet-class>com.arsdigita.web.LegacyAdapterServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>cache-manager</servlet-name>
<servlet-class>com.arsdigita.caching.CacheServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>db-test</servlet-name>
<servlet-class>com.arsdigita.web.monitoring.DBTestServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>versioning-log</servlet-name>
<servlet-class>com.arsdigita.versioning.VersioningServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>oid-redirect</servlet-name>
<servlet-class>com.arsdigita.web.OIDRedirectServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>resource-resolver</servlet-name>
<servlet-class>com.arsdigita.web.ResourceServlet</servlet-class>
</servlet>
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ADDITIONAL SERVLET DECLARATIONS SECTION
basically requirred by ccm-cms
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<servlet>
<servlet-name>content-section</servlet-name>
<servlet-class>com.arsdigita.cms.ContentSectionServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>content-type-xsl</servlet-name>
<servlet-class>com.arsdigita.cms.dispatcher.ContentTypeXSLServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>content-item-xsl</servlet-name>
<servlet-class>com.arsdigita.cms.dispatcher.ContentItemXSLServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>template-xsl</servlet-name>
<servlet-class>com.arsdigita.cms.dispatcher.TemplateXSLServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>TextOnlyServlet</servlet-name>
<display-name>Text Only Servlet</display-name>
<servlet-class>
com.arsdigita.web.InternalPrefixerServlet
</servlet-class>
<init-param>
<param-name>prefix</param-name>
<param-value>/text</param-value>
</init-param>
</servlet>
<servlet>
<servlet-name>PrintFriendlyServlet</servlet-name>
<display-name>Printer Friendly Output Servlet</display-name>
<servlet-class>
com.arsdigita.web.InternalPrefixerServlet
</servlet-class>
<init-param>
<param-name>prefix</param-name>
<param-value>/print</param-value>
</init-param>
</servlet>
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MODULES SERVLET DECLARATIONS SECTION
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<!-- module ccm-ldn-atoz - servlet definitions BEGIN
NOT USED with ZeS
<servlet>
<servlet-name>atoz-files</servlet-name>
<servlet-class>com.arsdigita.web.ApplicationFileServlet</servlet-class>
<init-param>
<param-name>template-path</param-name>
<param-value>/templates/ccm-ldn-atoz</param-value>
</init-param>
</servlet>
module ccm-ldn-atoz - servlet definitions END -->
<!-- module ccm-forum - servlet declarations BEGIN -->
<servlet>
<servlet-name>forum-main</servlet-name>
<servlet-class>com.arsdigita.forum.ForumServlet</servlet-class>
</servlet>
<!-- module ccm-forum - servlet declarations END -->
<servlet>
<servlet-name>portal-files</servlet-name>
<servlet-class>com.arsdigita.web.ApplicationFileServlet</servlet-class>
<init-param>
<param-name>template-path</param-name>
<param-value>/templates/ccm-ldn-portal</param-value>
</init-param>
</servlet>
<servlet>
<servlet-name>navigation-files</servlet-name>
<servlet-class>com.arsdigita.web.ApplicationFileServlet</servlet-class>
<init-param>
<param-name>template-path</param-name>
<param-value>/templates/ccm-ldn-navigation</param-value>
</init-param>
<init-param>
<param-name>file-resolver</param-name>
<param-value>com.arsdigita.london.navigation.NavigationFileResolver</param-value>
</init-param>
</servlet>
<servlet>
<servlet-name>portlet-type-xsl</servlet-name>
<servlet-class>com.arsdigita.dispatcher.PortletTypeXSLServlet</servlet-class>
</servlet>
<!-- module ccm-ldn-rss - servlet declaration BEGIN -->
<servlet>
<servlet-name>rss-files</servlet-name>
<servlet-class>com.arsdigita.web.ApplicationFileServlet</servlet-class>
<init-param>
<param-name>template-path</param-name>
<param-value>/templates/ccm-ldn-rss</param-value>
</init-param>
<init-param>
<param-name>file-resolver</param-name>
<param-value>com.arsdigita.london.rss.RSSFileResolver</param-value>
</init-param>
</servlet>
<!-- module ccm-ldn-rss - servlet declaration END -->
<!-- module ccm-ldn-search - servlet declarations BEGIN -->
<servlet>
<servlet-name>worker</servlet-name>
<servlet-class>com.arsdigita.london.search.SearchWorkerServlet</servlet-class>
<load-on-startup>4</load-on-startup>
</servlet>
<servlet>
<servlet-name>search-files</servlet-name>
<servlet-class>com.arsdigita.web.ApplicationFileServlet</servlet-class>
<init-param>
<param-name>template-path</param-name>
<param-value>/templates/ccm-ldn-search</param-value>
</init-param>
</servlet>
<servlet>
<servlet-name>AxisServlet</servlet-name>
<display-name>Apache-Axis Servlet</display-name>
<servlet-class>
org.apache.axis.transport.http.AxisServlet
</servlet-class>
</servlet>
<!-- module ccm-ldn-search - servlet declarations END -->
<!-- module ccm-ldn-shortcuts - servlet definitions -->
<servlet>
<servlet-name>shortcuts-files</servlet-name>
<servlet-class>com.arsdigita.web.ApplicationFileServlet</servlet-class>
<init-param>
<param-name>template-path</param-name>
<param-value>/templates/ccm-ldn-shortcuts</param-value>
</init-param>
</servlet>
<!-- module ccm-ldn-subsite - servlet declarations BEGIN -->
<servlet>
<servlet-name>subsite-files</servlet-name>
<servlet-class>com.arsdigita.web.ApplicationFileServlet</servlet-class>
<init-param>
<param-name>template-path</param-name>
<param-value>/templates/ccm-ldn-subsite</param-value>
</init-param>
</servlet>
<!-- module ccm-ldn-subsite - servlet declarations END -->
<!-- module ccm-ldn-terms - servlet declarations BEGIN -->
<servlet>
<servlet-name>terms-files</servlet-name>
<servlet-class>com.arsdigita.web.ApplicationFileServlet</servlet-class>
<init-param>
<param-name>template-path</param-name>
<param-value>/templates/ccm-ldn-terms</param-value>
</init-param>
</servlet>
<!-- module ccm-ldn-terms - servlet declarations END -->
<!-- module ccm-themedirector - servlet declarations BEGIN -->
<servlet>
<servlet-name>theme-files</servlet-name>
<servlet-class>com.arsdigita.web.ApplicationFileServlet</servlet-class>
<init-param>
<param-name>template-path</param-name>
<param-value>/templates/ccm-themedirector</param-value>
</init-param>
</servlet>
<servlet>
<servlet-name>ThemeDownload</servlet-name>
<servlet-class>com.arsdigita.themedirector.dispatcher.ThemeDownloadServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>ThemePreviewServlet</servlet-name>
<display-name>Servlet to allow admins to preview look/feel</display-name>
<servlet-class>
com.arsdigita.themedirector.dispatcher.InternalThemePrefixerServlet
</servlet-class>
<init-param>
<param-name>prefix</param-name>
<param-value>/theme</param-value>
</init-param>
</servlet>
<!-- module ccm-themedirector - servlet declarations END -->
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MODULES SERVLET MAPPINGS SECTION
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<!-- module ccm-ldn-atoz - servlet mappings BEGIN
NOT USED HERE
<servlet-mapping>
<servlet-name>atoz-files</servlet-name>
<url-pattern>/ccm-ldn-atoz/files/*</url-pattern>
</servlet-mapping>
module ccm-ldn-atoz - servlet mappings END -->
<!-- module ccm-forum - servlet mappings BEGIN -->
<servlet-mapping>
<servlet-name>forum-main</servlet-name>
<url-pattern>/forum-main/main/*</url-pattern>
</servlet-mapping>
<!-- module ccm-forum - servlet mappings END -->
<servlet-mapping>
<servlet-name>portlet-type-xsl</servlet-name>
<url-pattern>/__ccm__/servlet/portlet-type/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>portal-files</servlet-name>
<url-pattern>/ccm-ldn-portal/files/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>navigation-files</servlet-name>
<url-pattern>/ccm-ldn-navigation/files/*</url-pattern>
</servlet-mapping>
<!-- module ccm-ldn-rss - servlet mappings -->
<servlet-mapping>
<servlet-name>rss-files</servlet-name>
<url-pattern>/ccm-ldn-rss/files/*</url-pattern>
</servlet-mapping>
<!-- module ccm-ldn-search - servlet mappings BEGIN -->
<servlet-mapping>
<servlet-name>search-files</servlet-name>
<url-pattern>/ccm-ldn-search/files/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<!-- module ccm-ldn-search - servlet mappings END -->
<!-- module ccm-ldn-shortcuts - servlet mappings -->
<servlet-mapping>
<servlet-name>shortcuts-files</servlet-name>
<url-pattern>/ccm-ldn-shortcuts/files/*</url-pattern>
</servlet-mapping>
<!-- module ccm-ldn-subsite - servlet mappings BEGIN -->
<servlet-mapping>
<servlet-name>subsite-files</servlet-name>
<url-pattern>/ccm-ldn-subsite/files/*</url-pattern>
</servlet-mapping>
<!-- module ccm-ldn-subsite - servlet mappings END -->
<!-- module ccm-ldn-terms - servlet mappings BEGIN -->
<servlet-mapping>
<servlet-name>terms-files</servlet-name>
<url-pattern>/ccm-ldn-terms/files/*</url-pattern>
</servlet-mapping>
<!-- module ccm-ldn-terms - servlet mappings END -->
<!-- module ccm-themedirector - servlet mappings BEGIN -->
<servlet-mapping>
<servlet-name>theme-files</servlet-name>
<url-pattern>/theme-files/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ThemeDownload</servlet-name>
<url-pattern>/theme-files/download/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ThemePreviewServlet</servlet-name>
<url-pattern>/theme/*</url-pattern>
</servlet-mapping>
<!-- module ccm-themedirector - servlet mappings END -->
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
BASE SERVLET MAPPINGS SECTION
basically requirred by ccm-core
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<servlet-mapping>
<servlet-name>reg</servlet-name>
<url-pattern>/__ccm__/null/reg/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ccm-dispatcher</servlet-name>
<url-pattern>/ccm/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>legacy-adapter</servlet-name>
<url-pattern>/__ccm__/servlet/legacy-adapter/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>cache-manager</servlet-name>
<url-pattern>/expireCache/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>db-test</servlet-name>
<url-pattern>/dbtest</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>versioning-log</servlet-name>
<url-pattern>/versioning/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>oid-redirect</servlet-name>
<url-pattern>/redirect/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>resource-resolver</servlet-name>
<url-pattern>/resource/*</url-pattern>
</servlet-mapping>
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ADDITIONAL SERVLET MAPPINGS SECTION
basically requirred by ccm-cms
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<servlet-mapping>
<servlet-name>content-section</servlet-name>
<url-pattern>/__ccm__/servlet/content-section/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>content-item-xsl</servlet-name>
<url-pattern>/__ccm__/servlet/content-item/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>content-type-xsl</servlet-name>
<url-pattern>/__ccm__/servlet/content-type/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>template-xsl</servlet-name>
<url-pattern>/__ccm__/servlet/template/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>TextOnlyServlet</servlet-name>
<url-pattern>/text/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>PrintFriendlyServlet</servlet-name>
<url-pattern>/print/*</url-pattern>
</servlet-mapping>
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ERROR PAGES
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<error-page>
<exception-type>com.arsdigita.dispatcher.AccessDeniedException</exception-type>
<location>/error/access-denied.jsp</location>
</error-page>
<error-page>
<exception-type>com.arsdigita.dispatcher.ObjectNotFoundException</exception-type>
<location>/error/object-not-found.jsp</location>
</error-page>
<error-page>
<exception-type>com.arsdigita.kernel.permissions.PermissionException</exception-type>
<location>/error/permission-denied.jsp</location>
</error-page>
<error-page>
<exception-type>com.arsdigita.persistence.DbNotAvailableException</exception-type>
<location>/error/db-not-available.jsp</location>
</error-page>
<error-page>
<exception-type>com.arsdigita.db.DbNotAvailableException</exception-type>
<location>/error/db-not-available.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/error/general.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.Error</exception-type>
<location>/error/general.jsp</location>
</error-page>
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TAG LIBS
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<taglib>
<taglib-uri>/WEB-INF/bebop-show.tld</taglib-uri>
<taglib-location>/WEB-INF/bebop-show.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/bebop-define.tld</taglib-uri>
<taglib-location>/WEB-INF/bebop-define.tld</taglib-location>
</taglib>
</web-app>

View File

@ -0,0 +1,9 @@
* Thu Sep 22 2005 Alan Pevec <apevec@redhat.com>
- Build all APLAWS+ bundles from the common set of templates.
* Mon Feb 21 2005 Alan Pevec <apevec@redhat.com>
- Requires applications.
* Mon Jan 26 2004 Daniel Berrange <berrange@redhat.com>
- Initial build.

View File

@ -0,0 +1,4 @@
BUNDLE_NAME=aplaws-plus-shp
BUNDLE_PRETTY_NAME="APLAWS+ SHP Standard Bundle"
VERSION=1.0.5devel
RELEASE=1

View File

@ -0,0 +1,80 @@
# ZeS standard application.cfg
# Main apps
ccm-core
ccm-cms
# Content assets
ccm-cms-assets-fileattachment
ccm-cms-assets-imagestep
ccm-cms-assets-notes
ccm-cms-assets-relatedlink
# Content types
ccm-cms-types-address
# -- ccm-cms-types-agenda
ccm-cms-types-article
ccm-cms-types-bookmark
ccm-cms-types-contact
ccm-cms-types-event
# -- ccm-cms-types-faqitem
ccm-cms-types-filestorageitem
ccm-cms-types-formitem
ccm-cms-types-formsectionitem
# -- ccm-cms-types-glossaryitem
# -- ccm-cms-types-htmlform
# -- ccm-cms-types-inlinesite
# -- ccm-cms-types-job
# -- ccm-cms-types-legalnotice
# -- ccm-cms-types-member
# -- ccm-cms-types-minutes
# -- ccm-cms-types-motditem
ccm-cms-types-mparticle
ccm-cms-types-newsitem
# -- ccm-cms-types-organization
ccm-cms-types-person
# -- ccm-cms-types-pressrelease
# -- ccm-cms-types-researchnetwork
# -- ccm-cms-types-service
ccm-cms-types-siteproxy
# -- xmlfeed wird moeglicherweise ebenfalls nicht gebraucht
ccm-cms-types-xmlfeed
# Applications
# ------------
# -- ccm-auth-http
# -- ccm-bookmarks
# -- ccm-docmngr
# -- ccm-formbuilder-pdf
ccm-forum
ccm-portalworkspace
ccm-simplesurvey
ccm-themedirector
ccm-user-preferences
# -- ccm-weblog
# -- ccm-webpage
# ldn extensions
# --------------
# -- ccm-ldn-aplaws
# -- ccm-ldn-atoz
# -- ccm-ldn-dublin
# -- ccm-ldn-exporter
# -- ccm-ldn-freeform
# -- ccm-ldn-importer
ccm-ldn-navigation
ccm-ldn-rss
ccm-ldn-search
ccm-ldn-shortcuts
ccm-ldn-subsite
ccm-ldn-terms
ccm-ldn-util
# sci extensions
# --------------
ccm-cms-dabinimporter
ccm-sci-publications
ccm-sci-types-organization
# integration layer
ccm-zes-aplaws

View File

@ -0,0 +1,135 @@
# ZeS standard bundle integration.properties
#
waf.bebop.base_page=com.arsdigita.aplaws.ui.SimplePage
#
; dhtml editor to use (system wide)
; default: Xinha editor & src=/assets/xinha/XinhaLoader.js
#waf.bebop.dhtml_editor=FCKeditor
waf.categorization.show_internal_name=true
waf.dispatcher.default_expiry=3600
;
waf.kernel.data_permission_check_enabled=false
waf.kernel.primary_user_identifier=email
; if you activate screen_name, forum loader doesn't work.
; waf.kernel.primary_user_identifier=screen_name
waf.kernel.supported_languages=de,en
; security.properties:
waf.auto_registration_on=false
# MOVED to ui.Config
#waf.pagemap.root=navigation/
#waf.pagemap.workspace=navigation/
#waf.pagemap.login_redirect=content/content-center-redirect.jsp
; Searches for localized style sheet (among others)
waf.templating.stylesheet_resolver=com.arsdigita.templating.PatternStylesheetResolver
waf.templating.stylesheet_paths=/WEB-INF/resources/aplaws-stylesheet-paths.txt
core.ui.pagemap.root_page_url=navigation/
core.ui.pagemap.workspace_url=navigation/
core.ui.pagemap.user_redirect_url=content/content-center-redirect.jsp
; workflow configuration
waf.workflow.simple.alerts_enabled=true
waf.workflow.simple.alerts_sender=webmaster@zes.uni-bremen.de
; Configures the xml processing
waf.xml.xsl_transformer=xalan
waf.xml.activate_full_date_formatter=true
# ccm-cms parameters
com.arsdigita.cms.category_authoring_add_form=com.arsdigita.aplaws.ui.ItemCategoryPicker
com.arsdigita.cms.default_folder_template_path=/default/aplaws-folder.jsp
com.arsdigita.cms.default_item_template_path=/default/aplaws-item.jsp
com.arsdigita.cms.default_template_resolver_class=com.arsdigita.london.subsite.dispatcher.SubsiteItemTemplateResolver
; Configure dhtml editor for use in cms content-center
;com.arsdigita.cms.dhtml_editor_config=FCKEditor.Config.StyleDefault?,/assets/fckeditor/config/fckconfigOpenCCM.js
; com.arsdigita.cms.dhtml_editor_config=XinhaConfig,/assets/xinha/XinhaConfig.js
;com.arsdigita.cms.dhtml_editor_hidden_buttons=
;com.arsdigita.cms.dhtml_editor_plugins=TableOperations,CSS
com.arsdigita.cms.dhtml_editor_plugins=
com.arsdigita.cms.disable_item_pfs=true
com.arsdigita.cms.hide_admin_tabs=true
com.arsdigita.cms.hide_folder_index_checkbox=true
com.arsdigita.cms.hide_launch_date=true
com.arsdigita.cms.hide_templates_tab=true
com.arsdigita.cms.hide_timezone=true
com.arsdigita.cms.hide_udct_ui=true
com.arsdigita.cms.use_section_categories=false
com.arsdigita.cms.use_streamlined_creation=true
# ccm-cms-types-event parameters
com.arsdigita.cms.contenttypes.event.hide_cost=true
com.arsdigita.cms.contenttypes.event.hide_link_to_map=true
com.arsdigita.cms.contenttypes.event.use_html_date_description=false
com.arsdigita.cms.contenttypes.event.start_year=2000
com.arsdigita.cms.contenttypes.event.end_year_delta=5
# ccm-cms-types-newsitem parameters
com.arsdigita.cms.contenttypes.newsitem.hide_homepage=true
com.arsdigita.cms.contenttypes.newsitem.start_year=2000
com.arsdigita.cms.contenttypes.newsitem.end_year_delta=5
# ?? Where are these used?
com.arsdigita.cms.contenttypes.mparticle.template=/WEB-INF/content-types/com/arsdigita/cms/contenttypes/aplaws-mparticle-item.jsp
com.arsdigita.cms.contenttypes.siteproxy.defaulttemplate=/WEB-INF/content-types/com/arsdigita/cms/contenttypes/aplaws-siteproxy-item.jsp
# Forum application
com.arsdigita.forum.show_new_tabs=true
com.arsdigita.forum.use_wysiwyg_editor=true
com.arsdigita.forum.allow_quick_finish=true
com.arsdigita.forum.disable_page_caching=true
# ccm-ldn-navigation application
com.arsdigita.london.navigation.category_menu_show_grand_children=false
com.arsdigita.london.navigation.default_cat_root_path=/navigation/
com.arsdigita.london.navigation.default_template=/packages/navigation/templates/zes-default.jsp
# ccm-ldn-search application
com.arsdigita.london.search.show_sponsored_links=true
# ccm-ldn-subsite application
com.arsdigita.london.subsite.root_category_picker=com.arsdigita.london.terms.ui.RootCategoryPicker
# ccm-ldn-themedirector application
themedirector.default_theme_context=
themedirector.default_theme_manifest=ccm-zes-aplaws.web.mf
themedirector.default_theme_path=__ccm__/themes/aplaws-generic
themedirector.file_extensions=bmp css gif jpeg jpg js png xml xsl
# =============================================================================================
# runtime specific configurations
waf.admin.email=webmaster@zes.uni-bremen.de
waf.admin.name.given=ZeS
waf.admin.name.family=Administrator
waf.admin.password=nge2015
waf.admin.password.question=12345
waf.admin.password.answer=6
waf.runtime.jdbc_url=jdbc\:postgresql\://134.102.3.27/zes?user\=zes&password\=zes47web
waf.runtime.jdbc_pool_size=60
waf.web.server=www.zes.uni-bremen.de\:80
waf.web.host=www.zes.uni-bremen.de\:80
waf.web.site_name=www.zes.uni-bremen.de

View File

@ -0,0 +1,558 @@
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">
<web-app>
<display-name>CCM ZeS</display-name>
<description>Content and Collaboration Management</description>
<!-- path and filename of the log4j user accessible config file
WEB-INF/conf/log4j.properties is the built-in default value -->
<context-param>
<param-name>log4j-conf-file</param-name>
<param-value>WEB-INF/conf/log4j.properties</param-value>
</context-param>
<!-- Require secure connection by redirect to host-port part
of parameter waf.web.secure_server
NOT USED with ZeS
<filter>
<filter-name>secured</filter-name>
<filter-class>com.arsdigita.web.SecureFilter</filter-class>
</filter>
-->
<!-- Initialize Profiler timers
NOT USED with ZeS standard / production
<filter>
<filter-name>profiler</filter-name>
<filter-class>com.arsdigita.profiler.ProfilerFilter</filter-class>
</filter>
-->
<filter>
<filter-name>shortcuts</filter-name>
<filter-class>com.arsdigita.london.shortcuts.ShortcutFilter</filter-class>
</filter>
<filter>
<filter-name>subsite</filter-name>
<filter-class>com.arsdigita.london.subsite.SubsiteFilter</filter-class>
</filter>
<!-- NOT USED HERE
<filter-mapping>
<filter-name>secured</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>profiler</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
-->
<filter-mapping>
<filter-name>subsite</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>shortcuts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Context Listener
required and used to initialize the runtime environment before any other
task is performed or any servlet initialized.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<listener>
<listener-class>com.arsdigita.web.CCMApplicationContextListener</listener-class>
</listener>
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
BASE SERVLET DECLARATIONS SECTION
basically requirred by ccm-core
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<servlet>
<servlet-name>reg</servlet-name>
<servlet-class>com.arsdigita.web.ContextRegistrationServlet</servlet-class>
<init-param>
<param-name>uri</param-name>
<param-value>/</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>legacy-dispatcher</servlet-name>
<servlet-class>com.arsdigita.sitenode.SiteNodeDispatcher</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet>
<servlet-name>ccm-dispatcher</servlet-name>
<servlet-class>com.arsdigita.web.DispatcherServlet</servlet-class>
<init-param>
<param-name>fallback-servlet</param-name>
<param-value>legacy-dispatcher</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet>
<servlet-name>legacy-adapter</servlet-name>
<servlet-class>com.arsdigita.web.LegacyAdapterServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>cache-manager</servlet-name>
<servlet-class>com.arsdigita.caching.CacheServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>db-test</servlet-name>
<servlet-class>com.arsdigita.web.monitoring.DBTestServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>versioning-log</servlet-name>
<servlet-class>com.arsdigita.versioning.VersioningServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>oid-redirect</servlet-name>
<servlet-class>com.arsdigita.web.OIDRedirectServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>resource-resolver</servlet-name>
<servlet-class>com.arsdigita.web.ResourceServlet</servlet-class>
</servlet>
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ADDITIONAL SERVLET DECLARATIONS SECTION
basically requirred by ccm-cms
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<servlet>
<servlet-name>content-section</servlet-name>
<servlet-class>com.arsdigita.cms.ContentSectionServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>content-type-xsl</servlet-name>
<servlet-class>com.arsdigita.cms.dispatcher.ContentTypeXSLServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>content-item-xsl</servlet-name>
<servlet-class>com.arsdigita.cms.dispatcher.ContentItemXSLServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>template-xsl</servlet-name>
<servlet-class>com.arsdigita.cms.dispatcher.TemplateXSLServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>TextOnlyServlet</servlet-name>
<display-name>Text Only Servlet</display-name>
<servlet-class>
com.arsdigita.web.InternalPrefixerServlet
</servlet-class>
<init-param>
<param-name>prefix</param-name>
<param-value>/text</param-value>
</init-param>
</servlet>
<servlet>
<servlet-name>PrintFriendlyServlet</servlet-name>
<display-name>Printer Friendly Output Servlet</display-name>
<servlet-class>
com.arsdigita.web.InternalPrefixerServlet
</servlet-class>
<init-param>
<param-name>prefix</param-name>
<param-value>/print</param-value>
</init-param>
</servlet>
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MODULES SERVLET DECLARATIONS SECTION
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<!-- module ccm-ldn-atoz - servlet definitions BEGIN
NOT USED with ZeS
<servlet>
<servlet-name>atoz-files</servlet-name>
<servlet-class>com.arsdigita.web.ApplicationFileServlet</servlet-class>
<init-param>
<param-name>template-path</param-name>
<param-value>/templates/ccm-ldn-atoz</param-value>
</init-param>
</servlet>
module ccm-ldn-atoz - servlet definitions END -->
<!-- module ccm-forum - servlet declarations BEGIN -->
<servlet>
<servlet-name>forum-main</servlet-name>
<servlet-class>com.arsdigita.forum.ForumServlet</servlet-class>
</servlet>
<!-- module ccm-forum - servlet declarations END -->
<servlet>
<servlet-name>portalworkspace-files</servlet-name>
<servlet-class>com.arsdigita.web.ApplicationFileServlet</servlet-class>
<init-param>
<param-name>template-path</param-name>
<param-value>/templates/ccm-portalworkspace</param-value>
</init-param>
</servlet>
<servlet>
<servlet-name>navigation-files</servlet-name>
<servlet-class>com.arsdigita.web.ApplicationFileServlet</servlet-class>
<init-param>
<param-name>template-path</param-name>
<param-value>/templates/ccm-ldn-navigation</param-value>
</init-param>
<init-param>
<param-name>file-resolver</param-name>
<param-value>com.arsdigita.london.navigation.NavigationFileResolver</param-value>
</init-param>
</servlet>
<servlet>
<servlet-name>portlet-type-xsl</servlet-name>
<servlet-class>com.arsdigita.dispatcher.PortletTypeXSLServlet</servlet-class>
</servlet>
<!-- module ccm-ldn-rss - servlet declaration BEGIN -->
<servlet>
<servlet-name>rss-files</servlet-name>
<servlet-class>com.arsdigita.web.ApplicationFileServlet</servlet-class>
<init-param>
<param-name>template-path</param-name>
<param-value>/templates/ccm-ldn-rss</param-value>
</init-param>
<init-param>
<param-name>file-resolver</param-name>
<param-value>com.arsdigita.london.rss.RSSFileResolver</param-value>
</init-param>
</servlet>
<!-- module ccm-ldn-rss - servlet declaration END -->
<!-- module ccm-ldn-search - servlet declarations BEGIN -->
<servlet>
<servlet-name>worker</servlet-name>
<servlet-class>com.arsdigita.london.search.SearchWorkerServlet</servlet-class>
<load-on-startup>4</load-on-startup>
</servlet>
<servlet>
<servlet-name>search-files</servlet-name>
<servlet-class>com.arsdigita.web.ApplicationFileServlet</servlet-class>
<init-param>
<param-name>template-path</param-name>
<param-value>/templates/ccm-ldn-search</param-value>
</init-param>
</servlet>
<servlet>
<servlet-name>AxisServlet</servlet-name>
<display-name>Apache-Axis Servlet</display-name>
<servlet-class>
org.apache.axis.transport.http.AxisServlet
</servlet-class>
</servlet>
<!-- module ccm-ldn-search - servlet declarations END -->
<!-- module ccm-ldn-shortcuts - servlet definitions -->
<servlet>
<servlet-name>shortcuts-files</servlet-name>
<servlet-class>com.arsdigita.web.ApplicationFileServlet</servlet-class>
<init-param>
<param-name>template-path</param-name>
<param-value>/templates/ccm-ldn-shortcuts</param-value>
</init-param>
</servlet>
<!-- module ccm-ldn-subsite - servlet declarations BEGIN -->
<servlet>
<servlet-name>subsite-files</servlet-name>
<servlet-class>com.arsdigita.web.ApplicationFileServlet</servlet-class>
<init-param>
<param-name>template-path</param-name>
<param-value>/templates/ccm-ldn-subsite</param-value>
</init-param>
</servlet>
<!-- module ccm-ldn-subsite - servlet declarations END -->
<!-- module ccm-ldn-terms - servlet declarations BEGIN -->
<servlet>
<servlet-name>terms-files</servlet-name>
<servlet-class>com.arsdigita.web.ApplicationFileServlet</servlet-class>
<init-param>
<param-name>template-path</param-name>
<param-value>/templates/ccm-ldn-terms</param-value>
</init-param>
</servlet>
<!-- module ccm-ldn-terms - servlet declarations END -->
<!-- module ccm-ldn-themes - servlet declarations BEGIN -->
<servlet>
<servlet-name>theme-files</servlet-name>
<servlet-class>com.arsdigita.web.ApplicationFileServlet</servlet-class>
<init-param>
<param-name>template-path</param-name>
<param-value>/templates/ccm-ldn-theme</param-value>
</init-param>
</servlet>
<servlet>
<servlet-name>ThemeDownload</servlet-name>
<servlet-class>com.arsdigita.london.theme.dispatcher.ThemeDownloadServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>ThemePreviewServlet</servlet-name>
<display-name>Servlet to allow admins to preview look/feel</display-name>
<servlet-class>
com.arsdigita.london.theme.dispatcher.InternalThemePrefixerServlet
</servlet-class>
<init-param>
<param-name>prefix</param-name>
<param-value>/theme</param-value>
</init-param>
</servlet>
<!-- module ccm-ldn-themes - servlet declarations END -->
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
MODULES SERVLET MAPPINGS SECTION
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<!-- module ccm-ldn-atoz - servlet mappings BEGIN
NOT USED HERE
<servlet-mapping>
<servlet-name>atoz-files</servlet-name>
<url-pattern>/ccm-ldn-atoz/files/*</url-pattern>
</servlet-mapping>
module ccm-ldn-atoz - servlet mappings END -->
<!-- module ccm-forum - servlet mappings BEGIN -->
<servlet-mapping>
<servlet-name>forum-main</servlet-name>
<url-pattern>/forum-main/main/*</url-pattern>
</servlet-mapping>
<!-- module ccm-forum - servlet mappings END -->
<servlet-mapping>
<servlet-name>portlet-type-xsl</servlet-name>
<url-pattern>/__ccm__/servlet/portlet-type/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>portalworkspace-files</servlet-name>
<url-pattern>/ccm-portalworkspace/files/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>navigation-files</servlet-name>
<url-pattern>/ccm-ldn-navigation/files/*</url-pattern>
</servlet-mapping>
<!-- module ccm-ldn-rss - servlet mappings -->
<servlet-mapping>
<servlet-name>rss-files</servlet-name>
<url-pattern>/ccm-ldn-rss/files/*</url-pattern>
</servlet-mapping>
<!-- module ccm-ldn-search - servlet mappings BEGIN -->
<servlet-mapping>
<servlet-name>search-files</servlet-name>
<url-pattern>/ccm-ldn-search/files/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<!-- module ccm-ldn-search - servlet mappings END -->
<!-- module ccm-ldn-shortcuts - servlet mappings -->
<servlet-mapping>
<servlet-name>shortcuts-files</servlet-name>
<url-pattern>/ccm-ldn-shortcuts/files/*</url-pattern>
</servlet-mapping>
<!-- module ccm-ldn-subsite - servlet mappings BEGIN -->
<servlet-mapping>
<servlet-name>subsite-files</servlet-name>
<url-pattern>/ccm-ldn-subsite/files/*</url-pattern>
</servlet-mapping>
<!-- module ccm-ldn-subsite - servlet mappings END -->
<!-- module ccm-ldn-terms - servlet mappings BEGIN -->
<servlet-mapping>
<servlet-name>terms-files</servlet-name>
<url-pattern>/ccm-ldn-terms/files/*</url-pattern>
</servlet-mapping>
<!-- module ccm-ldn-terms - servlet mappings END -->
<!-- module ccm-ldn-theme - servlet mappings BEGIN -->
<servlet-mapping>
<servlet-name>theme-files</servlet-name>
<url-pattern>/theme-files/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ThemeDownload</servlet-name>
<url-pattern>/theme-files/download/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ThemePreviewServlet</servlet-name>
<url-pattern>/theme/*</url-pattern>
</servlet-mapping>
<!-- module ccm-ldn-themes - servlet mappings END -->
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
BASE SERVLET MAPPINGS SECTION
basically requirred by ccm-core
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<servlet-mapping>
<servlet-name>reg</servlet-name>
<url-pattern>/__ccm__/null/reg/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ccm-dispatcher</servlet-name>
<url-pattern>/ccm/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>legacy-adapter</servlet-name>
<url-pattern>/__ccm__/servlet/legacy-adapter/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>cache-manager</servlet-name>
<url-pattern>/expireCache/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>db-test</servlet-name>
<url-pattern>/dbtest</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>versioning-log</servlet-name>
<url-pattern>/versioning/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>oid-redirect</servlet-name>
<url-pattern>/redirect/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>resource-resolver</servlet-name>
<url-pattern>/resource/*</url-pattern>
</servlet-mapping>
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ADDITIONAL SERVLET MAPPINGS SECTION
basically requirred by ccm-cms
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<servlet-mapping>
<servlet-name>content-section</servlet-name>
<url-pattern>/__ccm__/servlet/content-section/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>content-item-xsl</servlet-name>
<url-pattern>/__ccm__/servlet/content-item/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>content-type-xsl</servlet-name>
<url-pattern>/__ccm__/servlet/content-type/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>template-xsl</servlet-name>
<url-pattern>/__ccm__/servlet/template/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>TextOnlyServlet</servlet-name>
<url-pattern>/text/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>PrintFriendlyServlet</servlet-name>
<url-pattern>/print/*</url-pattern>
</servlet-mapping>
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ERROR PAGES
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<error-page>
<exception-type>com.arsdigita.dispatcher.AccessDeniedException</exception-type>
<location>/error/access-denied.jsp</location>
</error-page>
<error-page>
<exception-type>com.arsdigita.dispatcher.ObjectNotFoundException</exception-type>
<location>/error/object-not-found.jsp</location>
</error-page>
<error-page>
<exception-type>com.arsdigita.kernel.permissions.PermissionException</exception-type>
<location>/error/permission-denied.jsp</location>
</error-page>
<error-page>
<exception-type>com.arsdigita.persistence.DbNotAvailableException</exception-type>
<location>/error/db-not-available.jsp</location>
</error-page>
<error-page>
<exception-type>com.arsdigita.db.DbNotAvailableException</exception-type>
<location>/error/db-not-available.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/error/general.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.Error</exception-type>
<location>/error/general.jsp</location>
</error-page>
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TAG LIBS
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<taglib>
<taglib-uri>/WEB-INF/bebop-show.tld</taglib-uri>
<taglib-location>/WEB-INF/bebop-show.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/bebop-define.tld</taglib-uri>
<taglib-location>/WEB-INF/bebop-define.tld</taglib-location>
</taglib>
</web-app>

View File

@ -0,0 +1,10 @@
schemas = $(wildcard *.xsd)
all: app-schemas.html
app-schemas.html: app-schemas.htmc $(schemas) $(xmldocs)
htmltoc.pl $< > $@
clean:
rm -f app-schemas.html *.bak *~

View File

@ -0,0 +1,141 @@
<html>
<head>
<!-- WARNING -->
<title>APLAWS-II: Application Schemas</title>
<style>
.schema {
border: 1px solid black;
margin: 1em;
padding: 1em;
background: rgb(192,230,230);
}
</style>
</head>
<body bgcolor="white" text="black">
<h1>APLAWS-II: Application Schemas</h1>
<p>
<big><strong><em>Final 1 November 2003</em></strong></big>
</p>
<!-- TABLE OF CONTENTS -->
<!-- SECTION Introduction -->
<p>
This document provides the XML Schemas for the principle public facing
applications in APLAWS. The schemas describe the XML that is generated
by UI components prior to being fed into the XSLT transformer. Since the
precise combination of components that can be present in a particular
JSP page can vary from install to install, these schemas don't document
an entire page, but rather, each individual component that can be plugged
into a page.
</p>
<p>
The official specification for XML schemas can be found at the
<a href="http://www.w3.org/XML/Schema">W3C</a> site. For a gentler introduction, the O'Reilly
<a href="http://www.oreilly.com/catalog/xmlschema/">XML Schema book</a> is recommended reading.
</p>
<!-- SECTION Navigation -->
<p>
Category navigation components may be present on any
page in the site, since they provide things such as
the list of top level categories, breadcrumb trail,
etc.
</p>
<pre class="schema">
<!-- INSERT navigation.xsd -->
</pre>
<!-- SECTION Directory -->
<p>
The directory page in APLAWS, commonly found at /content/directory.jsp
contains a summary of top two levels of navigation categories.
</p>
<pre class="schema">
<!-- INSERT directory.xsd -->
</pre>
<!-- SECTION Services -->
<p>
The services page in APLAWS, commonly found at /content/services.jsp,
is little more than a placeholder for designers to hook on to.
</p>
<pre class="schema">
<!-- INSERT services.xsd -->
</pre>
<!-- SECTION Site Map -->
<p>
The sitemap page in APLAWS, commonly found at /content/sitemap.jsp
is little more than a placeholder for designers to hook on to.
</p>
<pre class="schema">
<!-- INSERT sitemap.xsd -->
</pre>
<!-- SECTION Portals -->
<p>
The portals schema describes the generic framework for browsing
workspaces &amp; portals. Each portlet type will have its own schema
to describe what XML it generates.
</p>
<pre class="schema">
<!-- INSERT portal.xsd -->
</pre>
<!-- SECTION Forums -->
<p>
The schema for forums only describes the components that are used to
present information about messages. It does not cover the Bebop forms
and administrative UI components.
</p>
<pre class="schema">
<!-- INSERT forum.xsd -->
</pre>
<!-- SECTION Search -->
<p>
The schema for search describes the XML document used to represent
the result list and the filter metadata which can be used to build
a query form in HTML.
</p>
<pre class="schema">
<!-- INSERT search.xsd -->
</pre>
<!-- SECTION A-Z -->
<p>
The A-Z application is a framework for providing a list of
topics and items paginated by letter.
</p>
<pre class="schema">
<!-- INSERT atoz.xsd -->
</pre>
<!-- FOOTER Daniel Berrange (berrange@redhat.com) -->
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,90 @@
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:gen="http://xmlns.redhat.com/core/bebop/generator/1.0"
xmlns="http://xmlns.redhat.com/atoz/1.0"
elementFormDefault="qualified"
targetNamespace="http://xmlns.redhat.com/atoz/1.0">
<xs:element name="atoz">
<xs:annotation>
<xs:documentation xml:lang="en">
The AtoZ provides a pluggable letter paginated
listing of topics and optionally items with a
topic
</xs:documentation>
<xs:appinfo>
<gen:class>com.arsdigita.london.atoz.ui.AtoZPane</gen:class>
</xs:appinfo>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="letter" minOccurs="26" maxOccurs="26">
<xs:complexType>
<xs:attribute name="isSelected" type="xs:boolean"/>
</xs:complexType>
</xs:element>
<xs:element name="provider" type="provider" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="entryList">
<xs:annotation>
<xs:documentation xml:lang="en">
This type is a base for an element containing
child entries, either topics or items.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:choice>
<xs:element name="atomicEntry" type="atomicEntry"/>
<xs:element name="compoundEntry" type="compoundEntry"/>
</xs:choice>.
</xs:sequence>
</xs:complexType>
<xs:complexType name="provider">
<xs:annotation>
<xs:documentation xml:lang="en">
A provider is a module which generates A-Z entries.
A category provider may generate a list of items
corresponding to navigation categories.
</xs:documentation>
</xs:annotation>
<xs:extension base="entryList">
<xs:attribute name="title" type="xs:string"/>
<xs:attribute name="description" type="xs:string" use="optional"/>
</xs:extension>
</xs:complexType>
<xs:complexType name="atomicEntry">
<xs:annotation>
<xs:documentation xml:lang="en">
An atomic entry is a leaf-node in the A-Z, representing
a single item (or page of content) in the A-Z. As such
it has a URL pointing to the location of the item.
</xs:documentation>
</xs:annotation>
<xs:attribute name="title" type="xs:string"/>
<xs:attribute name="description" type="xs:string" use="optional"/>
<xs:attribute name="url" type="xs:anyURI"/>
</xs:complexType>
<xs:complexType name="compoundEntry">
<xs:annotation>
<xs:documentation xml:lang="en">
A compound entry can be thought of as a topic,
with a title and description. It will contain
a number of child entries, representing either
sub-topics or items.
</xs:documentation>
</xs:annotation>
<xs:extension base="entryList">
<xs:attribute name="title" type="xs:string"/>
<xs:attribute name="description" type="xs:string" use="optional"/>
</xs:extension>
</xs:complexType>
</xs:schema>

View File

@ -0,0 +1,59 @@
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:gen="http://xmlns.redhat.com/core/bebop/generator/1.0"
xmlns="http://www.arsdigita.com/cms/1.0"
elementFormDefault="qualified"
targetNamespace="http://www.arsdigita.com/cms/1.0">
<xs:element name="directory">
<xs:annotation>
<xs:documentation xml:lang="en">
The directory component displays a summary of the first two
levels of the navigation category heirarchy. The categoryID
attribute can be used to link to
$context-prefix/navigation/category.jsp?categoryID=XXX
</xs:documentation>
<xs:appinfo>
<gen:class>com.arsdigita.london.navigation.ui.DirectoryComponent</gen:class>
</xs:appinfo>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="directoryL1Category" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="directoryL2Category" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="title" type="xs:string">
<xs:attribute name="description" type="xs:string" use="optional">
<xs:attribute name="categoryID" type="xs:integer">
</xs:complexType>
</xs:element>
<xs:element name="directoryItem" minOccurs="0" maxOccurs="3">
<xs:annotation>
<xs:documentation xml:lang="en">
The first two items are instances of the 'Fixed Promo'
content type in the current category. The third item
is a 'Fixed Promo' item from the subcategory.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:attribute name="title" type="xs:string">
<xs:attribute name="path" type="xs:anyURI">
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="title" type="xs:string">
<xs:attribute name="description" type="xs:string" use="optional">
<xs:attribute name="categoryID" type="xs:integer">
</xs:complexType>
</xs:element>
</sequence>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,312 @@
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:gen="http://xmlns.redhat.com/core/bebop/generator/1.0"
xmlns:bebop="http://www.arsdigita.com/bebop/1.0"
xmlns="http://xmlns.redhat.com/forums/1.0"
elementFormDefault="qualified"
targetNamespace="http://xmlns.redhat.com/forums/1.0">
<xs:element name="forum" type="forumComponent">
<xs:complexType name="forumComponent">
<xs:annotation>
<xs:appinfo>
<gen:class>com.arsdigita.forum.ui.ForumComponent</gen:class>
</xs:appinfo>
</xs:annotation>
<xs:sequence>
<xs:element name="forumMode" minOccurs="0" maxOccurs="unbounded" type="forumMode"/>
<xs:choice>
<xs:choice>
<xs:annotation>
<xs:appinfo>
<gen:class>com.arsdigita.forum.ui.ForumUserView</gen:class>
</xs:appinfo>
</xs:annotation>
<xs:sequence>
<xs:element name="forumOptions" type="forumOptions"/>
<xs:element name="topicSelector" type="topicSelector"/>
<xs:element name="threadList" type="threadList"/>
</xs:sequence>
<xs:element name="bebop:form" type="bebopForm">
<xs:annotation>
<xs:appinfo>
<gen:class>com.arsdigita.forum.ui.NewPostForm</gen:class>
</xs:appinfo>
</xs:annotation>
</xs:element>
</xs:choice>
<xs:choice>
<xs:annotation>
<xs:appinfo>
<gen:class>com.arsdigita.forum.ui.CategoryView</gen:class>
</xs:appinfo>
</xs:annotation>
<xs:sequence>
<xs:element name="topicOptions" type="topicOptions"/>
<xs:element name="topicList" type="topicList"/>
</xs:sequence>
<xs:element name="bebop:form" type="bebopForm">
<xs:annotation>
<xs:appinfo>
<gen:class>com.arsdigita.forum.ui.CategoryAddForm</gen:class>
</xs:appinfo>
</xs:annotation>
</xs:element>
</xs:choice>
<xs:sequence>
<xs:annotation>
<xs:appinfo>
<gen:class>com.arsdigita.forum.ui.ForumAlertsView</gen:class>
</xs:appinfo>
</xs:annotation>
<xs:element name="forumAlerts" type="forumAlerts"/>
<xs:element name="threadAlerts" type="threadAlerts"/>
</xs:sequence>
<xs:sequence>
<xs:annotation>
<xs:appinfo>
<gen:class>com.arsdigita.forum.ui.admin.ModerationView</gen:class>
</xs:appinfo>
</xs:annotation>
<xs:element name="bebop:form" type="bebopForm"/>
</xs:sequence>
</xs:choice>
</xs:sequence>
</xs:complexType>
<xs:complexType name="threadComponent">
<xs:choice>
<xs:element name="bebop:form" type="bebopForm">
<xs:annotation>
<xs:appinfo>
<gen:class>com.arsdigita.forum.ui.EditPostForm</gen:class>
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element name="bebop:form" type="bebopForm">
<xs:annotation>
<xs:appinfo>
<gen:class>com.arsdigita.forum.ui.ReplyToPostForm</gen:class>
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element name="bebop:form" type="bebopForm">
<xs:annotation>
<xs:appinfo>
<gen:class>com.arsdigita.forum.ui.RejectionForm</gen:class>
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:sequence>
<xs:element name="threadOptions" type="threadOptions"/>
<xs:element name="threadDisplay" type="threadDisplay"/>
</xs:element>
</xs:choice>
</xs:complexType>
<xs:complexType name="forumMode">
<xs:annotation>
<xs:documentation xml:lang="en">
A forum mode refers to one of the alternate
views onto the forum application. The url
attributes provides the link for switching
into the mode.
</xs:documentation>
</xs:annotation>
<xs:attribute name="mode" type="xs:string"/>
<xs:attribute name="url" type="xs:anyURI"/>
<xs:attribute name="selected" type="xs:boolean"/>
</xs:complexType>
<xs:complexType name="forumOptions">
<xs:annotation>
<xs:documentation xml:lang="en">
A set of links relating to operations
in the thread list, such as posting
a new message.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="bebop:link" type="bebopLink"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="topicSelector">
<xs:annotation>
<xs:appinfo>
<gen:class>com.arsdigita.forum.ui.TopicSelector</gen:class>
</xs:appinfo>
</xs:annotation>
<xs:sequence>
<xs:element name="topic">
<xs:sequence>
XXX DOR
</xs:sequence>
</xs:element>
<xs:sequence>
<xs:attribute name="baseURL" type="xs:anyURI"/>
<xs:attribute name="param" type="xs:string"/>
<xs:attribute name="anyTopicID" type="xs:integer"/>
<xs:attribute name="noTopicID" type="xs:integer"/>
</xs:complexType>
<xs:complexType name="threadList">
<xs:annotation>
<xs:appinfo>
<gen:class>com.arsdigita.forum.ui.ThreadList</gen:class>
</xs:appinfo>
</xs:annotation>
<xs:sequence>
<xs:element name="paginator" type="paginator"/>
<xs:element name="thread" minOccurs="0" maxOccurs="unbounded">
<xs:sequence>
XXX DOR
</xs:sequence>
<xs:attribute name="url" type="xs:anyURI"/>
</xs:element>
<xs:sequence>
</xs:complexType>
<xs:complexType name="topicOptions">
<xs:annotation>
<xs:documentation xml:lang="en">
A set of links relating to operations
in the topic list, such as creating
a new topic.
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="bebop:link" type="bebopLink"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="topicList">
<xs:annotation>
<xs:appinfo>
<gen:class>com.arsdigita.forum.ui.TopicList</gen:class>
</xs:appinfo>
</xs:annotation>
<xs:sequence>
<xs:element name="topicSummary" minOccurs="0" maxOccurs="unbounded">
<xs:sequence>
<xs:element name="id"/>
<xs:element name="name"/>
<xs:element name="latestPost"/>
<xs:element name="numThreads"/>
</xs:sequence>
</xs:element>
<xs:element name="noTopicSummary">
<xs:sequence>
<xs:element name="latestPost"/>
<xs:element name="numThreads"/>
</xs:sequence>
<xs:attribute name="url" type="xs:anyURI"/>
</xs:element>
<xs:sequence>
<xs:attribute name="param" type="xs:string"/>
<xs:attribute name="baseURL" type="xs:anyURI"/>
</xs:complexType>
<xs:complexType name="threadAlertList">
<xs:annotation>
<xs:appinfo>
<gen:class>com.arsdigita.forum.ui.ThreadAlertList</gen:class>
</xs:appinfo>
</xs:annotation>
<xs:sequence>
<xs:element name="threadAlert" minOccurs="0" maxOccurs="unbounded">
<xs:sequence>
XXX DOR
</xs:sequence>
<xs:attribute name="url" type="xs:anyURI"/>
</xs:element>
<xs:sequence>
</xs:complexType>
<xs:complexType name="forumAlerts">
<xs:element name="bebop:form" type="bebopForm"/>
</xs:complexType>
<xs:complexType name="threadAlerts">
<xs:element name="bebop:form" type="bebopForm"/>
</xs:complexType>
<xs:complexType name="threadOptions">
<xs:annotation>
<xs:documentation xml:lang="en">
A set of links relating to operations
in the thread list, such as alert
subscribe
</xs:documentation>
</xs:annotation>
<xs:sequence>
<xs:element name="bebop:link" type="bebopLink"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="threadDisplay">
<xs:annotation>
<xs:appinfo>
<gen:class>com.arsdigita.forum.ui.ThreadList</gen:class>
</xs:appinfo>
</xs:annotation>
<xs:sequence>
<xs:element name="paginator" type="paginator"/>
<xs:element name="message" minOccurs="0" maxOccurs="unbounded">
<xs:sequence>
XXX DOR
</xs:sequence>
<xs:attribute name="approveURL" type="xs:anyURI" use="optional"/>
<xs:attribute name="rejectURL" type="xs:anyURI" use="optional"/>
<xs:attribute name="deleteURL" type="xs:anyURI" use="optional"/>
<xs:attribute name="editURL" type="xs:anyURI" use="optional"/>
<xs:attribute name="replyURL" type="xs:anyURI"/>
</xs:element>
<xs:sequence>
</xs:complexType>
<xs:complexType name="paginator">
<xs:attribute name="param" type="xs:string"/>
<xs:attribute name="baseURL" type="xs:anyURI"/>
<xs:attribute name="pageNumber" type="xs:integer"/>
<xs:attribute name="pageCount" type="xs:integer"/>
<xs:attribute name="pageSize" type="xs:integer"/>
<xs:attribute name="objectBegin" type="xs:long"/>
<xs:attribute name="objectEnd" type="xs:long"/>
<xs:attribute name="objectCount" type="xs:long"/>
</xs:complexType>
<xs:complexType name="bebopForm">
</xs:complexType>
<xs:complexType name="bebopLink">
</xs:complexType>
</xs:schema>

View File

@ -0,0 +1,104 @@
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://rhea.redhat.com/schemas/navigation"
elementFormDefault="qualified"
targetNamespace="http://rhea.redhat.com/schemas/navigation">
<xs:complexType name="alphabet">
<xs:sequence>
<xs:element name="letter">
<xs:complexType>
<xs:attribute name="value" type="xs:string"/>
<xs:attribute name="url" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="calendar">
<xs:sequence>
<xs:element name="today">
<xs:complexType>
<xs:attribute name="date" type="xs:string"/>
<xs:attribute name="day" type="xs:string"/>
<xs:attribute name="week" type="xs:string"/>
<xs:attribute name="month" type="xs:string"/>
<xs:attribute name="prettyMonth" type="xs:string"/>
<xs:attribute name="period" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="year">
<xs:complexType>
<xs:sequence>
<xs:element name="month">
<xs:complexType>
<xs:sequence>
<xs:element name="week">
<xs:complexType>
<xs:sequence>
<xs:element name="day">
<xs:complexType>
<xs:attribute name="url" type="xs:string"/>
<xs:attribute name="date" type="xs:string"/>
<xs:attribute name="day" type="xs:string"/>
<xs:attribute name="week" type="xs:string"/>
<xs:attribute name="month" type="xs:string"/>
<xs:attribute name="dayOfWeek" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="url" type="xs:string"/>
<xs:attribute name="rank" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="url" type="xs:string"/>
<xs:attribute name="name" type="xs:string"/>
<xs:attribute name="previousURL" type="xs:string"/>
<xs:attribute name="nextURL" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="name" type="xs:string"/>
<xs:attribute name="previousURL" type="xs:string"/>
<xs:attribute name="nextURL" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="categoryList">
<xs:sequence>
<xs:element name="category" type="object" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="objectList">
<xs:sequence>
<xs:element name="paginator" type="paginator"/>
<xs:element name="object" type="object" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="paginator">
<xs:attribute name="pageNumber" type="xs:integer"/>
<xs:attribute name="pageCount" type="xs:integer"/>
<xs:attribute name="pageSize" type="xs:integer"/>
<xs:attribute name="objectBegin" type="xs:integer"/>
<xs:attribute name="objectEnd" type="xs:integer"/>
<xs:attribute name="objectCount" type="xs:integer"/>
</xs:complexType>
<xs:complexType name="object">
<xs:attribute name="oid" type="xs:string"/>
<xs:attribute name="title" type="xs:string"/>
<xs:attribute name="description" type="xs:string"/>
<xs:attribute name="url" type="xs:string"/>
</xs:complexType>
</xs:schema>

View File

@ -0,0 +1,165 @@
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:gen="http://xmlns.redhat.com/core/bebop/generator/1.0"
xmlns="http://xmlns.redhat.com/atoz/1.0"
elementFormDefault="qualified"
targetNamespace="http://xmlns.redhat.com/atoz/1.0">
<xs:element name="categoryRoot">
<xs:annotation>
<xs:documentation xml:lang="en">
Outputs the root navigation category
</xs:documentation>
<xs:appinfo>
<gen:class>com.arsdigita.london.navigation.ui.category.Root</gen:class>
</xs:appinfo>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="category" type="category" minOccurs="1" maxOccurs="1"/>
</sequence>
</xs:complexType>
</xs:element>
<xs:element name="categoryTopLevel">
<xs:annotation>
<xs:documentation xml:lang="en">
Outputs the first level navigation categories (ie immediate
children of the root).
</xs:documentation>
<xs:appinfo>
<gen:class>com.arsdigita.london.navigation.ui.category.TopLevel</gen:class>
</xs:appinfo>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="category" type="category" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</xs:complexType>
</xs:element>
<xs:element name="categorySiblings">
<xs:annotation>
<xs:documentation xml:lang="en">
Outputs siblings of the category category (ie, those categories
at the same level as the current category.
</xs:documentation>
<xs:appinfo>
<gen:class>com.arsdigita.london.navigation.ui.category.Siblings</gen:class>
</xs:appinfo>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="category" type="category" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</xs:complexType>
</xs:element>
<xs:element name="categoryChildren">
<xs:annotation>
<xs:documentation xml:lang="en">
Outputs immediate children of the current category
</xs:documentation>
<xs:appinfo>
<gen:class>com.arsdigita.london.navigation.ui.category.Children</gen:class>
</xs:appinfo>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="category" type="category" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</xs:complexType>
</xs:element>
<xs:element name="categoryPath">
<xs:annotation>
<xs:documentation xml:lang="en">
Outputs the categories on a path between the root navigation
category (exclusive) and the current category (inclusive).
</xs:documentation>
<xs:appinfo>
<gen:class>com.arsdigita.london.navigation.ui.category.Path</gen:class>
</xs:appinfo>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="category" type="category" minOccurs="1" maxOccurs="unbounded"/>
</sequence>
</xs:complexType>
</xs:element>
<xs:element name="categoryMenu">
<xs:annotation>
<xs:documentation xml:lang="en">
Outputs the immediate children of all categories between the
root navigation category & the current category (both inclusive).
This is intended for showing a contextually-expanded tree to
the current category.
</xs:documentation>
<xs:appinfo>
<gen:class>com.arsdigita.london.navigation.ui.category.Menu</gen:class>
</xs:appinfo>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="category" type="nestedCategory" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</xs:complexType>
</xs:element>
<xs:element name="categoryHierarchy">
<xs:annotation>
<xs:documentation xml:lang="en">
Outputs all categories, starting from the root navigation category
and recursing.
</xs:documentation>
<xs:appinfo>
<gen:class>com.arsdigita.london.navigation.ui.category.Hierarchy</gen:class>
</xs:appinfo>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="category" type="nestedCategory" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="category">
<xs:annotation>
<xs:documentation xml:lang="en">
Represents the information for a single category. When
generating links to the category page, the url attribute
is the preferred method. The id attribute is merely
present for informational purposes.
</xs:documentation>
</xs:annotation>
<xs:attribute name="id" type="xs:integer"/>
<xs:attribute name="title" type="xs:string"/>
<xs:attribute name="description" type="xs:string" use="optional"/>
<xs:attribute name="url" type="xs:anyURI"/>
</xs:complexType>
<xs:complexType name="nestedCategory">
<xs:extension base="category">
<xs:sequence>
<xs:element name="category" type="nestedCategory" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:extension>
</xs:complexType
</xs:schema>

View File

@ -0,0 +1,95 @@
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.uk.arsdigita.com/portal/1.0"
xmlns:portlet="http://www.uk.arsdigita.com/portlet/1.0"
xmlns:debug="http://xmlns.redhat.com/waf/bebop/debug/1.0"
xmlns:bebop="http://www.arsdigita.com/bebop/1.0"
elementFormDefault="qualified"
targetNamespace="http://www.uk.arsdigita.com/portal/1.0">
<xs:element name="workspace">
<xs:sequence>
<xs:element name="workspaceDetails" type="workspaceDetails">
<xs:element name="portalList" type="portalList">
<xs:element name="bebop:portal" type="portalDisplay">
</xs:sequence>
</xs:element>
<xs:complexType name="workspaceDetails">
<xs:annotation>
<xs:documentation xml:lang="en">
This outputs metadata about the workspace along with a
summary of permissions.
</xs:documentation>
<xs:appinfo>
<debug:class>com.arsdigita.london.portal.ui.WorkspaceDetails</debug:class>
</xs:appinfo>
</xs:annotation>
<xs:sequence>
<xs:element name="objectType" minOccurs="1" maxOccurs="1"/>
<xs:element name="title" minOccurs="1" maxOccurs="1"/>
<xs:element name="description" minOccurs="0" maxOccurs="1"/>
<xs:element name="primaryURL" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="oid" type="xs:string"/>
<xs:attribute name="canEdit" type="xs:boolean"/>
<xs:attribute name="canAdmin" type="xs:boolean"/>
</xs:complexType>
<xs:complexType name="portalList">
<xs:annotation>
<xs:documentation xml:lang="en">
This component generates a summary list of all portals
in a workspace. One use of this is to generate a set
of tabbed panes for switching between portals.
</xs:documentation>
<xs:appinfo>
<debug:class>com.arsdigita.london.portal.ui.PortalList</debug:class>
</xs:appinfo>
</xs:annotation>
<xs:sequence>
<xs:element name="portalDetails" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="objectType" minOccurs="1" maxOccurs="1"/>
<xs:element name="title" minOccurs="1" maxOccurs="1"/>
<xs:element name="description" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="oid" type="xs:string"/>
<xs:attribute name="isSelected" type="xs:boolean"/>
<xs:attribute name="selectAction" type="xs:url"/>
<xs:attribute name="deleteAction" type="xs:url" use="optional"/>
<xs:attribute name="moveLeftAction" type="xs:url" use="optional"/>
<xs:attribute name="moveRightAction" type="xs:url" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="bebop:form"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="portalDisplay">
<xs:annotation>
<xs:appinfo>
<debug:class>com.arsdigita.london.portal.ui.PersistentPortal</debug:class>
</xs:appinfo>
</xs:annotation>
<xs:sequence>
<xs:element name="" minOccurs="" maxOccurs="">
</xs:sequence>
</xs:complexType>
</xs:schema>

View File

@ -0,0 +1,103 @@
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:gen="http://xmlns.redhat.com/core/bebop/generator/1.0"
xmlns:bebop="http://www.arsdigita.com/bebop/1.0"
xmlns="http://xmlns.redhat.com/core/search/1.0"
elementFormDefault="qualified"
targetNamespace="http://xmlns.redhat.com/core/search/1.0">
<xs:element name="query" type="query"/>
<xs:element name="results" type="results"/>
<xs:complexType name="results">
<xs:annotation>
<xs:appinfo>
<gen:class>com.arsdigita.search.ui.ResultsPane</gen:class>
</xs:appinfo>
</xs:annotation>
<xs:sequence>
<xs:element name="paginator">
<xs:attribute name="param" type="xs:string"/>
<xs:attribute name="baseURL" type="xs:anyURI"/>
<xs:attribute name="pageNumber" type="xs:integer"/>
<xs:attribute name="pageCount" type="xs:integer"/>
<xs:attribute name="pageSize" type="xs:integer"/>
<xs:attribute name="objectBegin" type="xs:long"/>
<xs:attribute name="objectEnd" type="xs:long"/>
<xs:attribute name="objectCount" type="xs:long"/>
</xs:element>
<xs:element name="documents">
<xs:sequence>
<xs:element name="object" minOccurs="0" maxOccurs="unbounded">
<xs:attribute name="oid" type="xs:string"/>
<xs:attribute name="url" type="xs:string"/>
<xs:attribute name="score" type="xs:string"/>
<xs:attribute name="title" type="xs:string"/>
<xs:attribute name="summary" type="xs:string" use="optional"/>
<xs:attribute name="locale" type="xs:string"/>
<xs:attribute name="creationDate" type="xs:string" use="optional"/>
<xs:attribute name="creationParty" type="xs:string" use="optional"/>
<xs:attribute name="lastModifiedDate" type="xs:string" use="optional"/>
<xs:attribute name="lastModifiedParty" type="xs:string" use="optional"/>
</xs:element>
</xs:sequence>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="query">
<xs:annotation>
<xs:appinfo>
<gen:class>com.arsdigita.search.ui.BaseQueryComponent</gen:class>
</xs:appinfo>
</xs:annotation>
<xs:sequence>
<xs:element name="terms">
<xs:sequence>
<xs:element name="error" minOccurs="0" maxOccurs="unbounded">
</xs:sequence>
<xs:attribute name="param" type="xs:string"/>
<xs:attribute name="value" type="xs:string"/>
</xs:element>
<xs:element name="filter" minOccurs="0" maxOccurs="unbounded">
<xs:sequence>
<xs:element name="error" minOccurs="0" maxOccurs="unbounded">
<xs:choice>
<xs:element name="category" type="category" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="objectType" type="objectType" minOccurs="0" maxOccurs="unbounded"/>
</xs:choice>
</xs:sequence>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="category">
<xs:annotation>
<xs:appinfo>
<gen:class>com.arsdigita.search.ui.filters.CategoryFilterWidget</gen:class>
</xs:appinfo>
</xs:annotation>
<xs:attribute name="oid" type="xs:string"/>
<xs:attribute name="title" type="xs:string"/>
<xs:attribute name="description" type="xs:string"/>
<xs:attribute name="isSelected" type="xs:string" use="optional"/>
</xs:complexType>
<xs:complexType name="objectType">
<xs:annotation>
<xs:appinfo>
<gen:class>com.arsdigita.search.ui.filters.ObjectTypeFilterWidget</gen:class>
</xs:appinfo>
</xs:annotation>
<xs:attribute name="name" type="xs:string"/>
<xs:attribute name="isSelected" type="xs:string" use="optional"/>
</xs:complexType>
</xs:schema>

View File

@ -0,0 +1,20 @@
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:gen="http://xmlns.redhat.com/core/bebop/generator/1.0"
xmlns="http://www.arsdigita.com/aplaws/1.0"
elementFormDefault="qualified"
targetNamespace="http://www.arsdigita.com/aplaws/1.0">
<xs:element name="services">
<xs:annotation>
<xs:documentation xml:lang="en">
The services component is just a place holder for hooking onto
in XSLT. At this time it contains no content.
</xs:documentation>
<xs:appinfo>
<gen:class>com.arsdigita.aplaws.ui.ServicesComponent</gen:class>
</xs:appinfo>
</xs:annotation>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,20 @@
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:gen="http://xmlns.redhat.com/core/bebop/generator/1.0"
xmlns="http://www.arsdigita.com/aplaws/1.0"
elementFormDefault="qualified"
targetNamespace="http://www.arsdigita.com/aplaws/1.0">
<xs:element name="sitemap">
<xs:annotation>
<xs:documentation xml:lang="en">
The sitemap component is just a place holder for hooking onto
in XSLT. At this time it contains no content.
</xs:documentation>
<xs:appinfo>
<gen:class>com.arsdigita.aplaws.ui.SitemapComponent</gen:class>
</xs:appinfo>
</xs:annotation>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,94 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://aplaws.org/schemas/content-types/com/arsdigita/cms/contenttypes/Address">
<xs:element name="object">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="objectType" type="xs:string"/>
<xs:element minOccurs="0" name="type">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="label" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="language" type="xs:string"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="fileAttachments">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="id" type="xs:double"/>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element maxOccurs="unbounded" minOccurs="0" name="links">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="linkTitle" type="xs:string"/>
<xs:element minOccurs="0" name="linkDescription" type="xs:string"/>
<xs:element name="targetType" type="xs:string"/>
<xs:element minOccurs="0" name="targetURI" type="xs:string"/>
<xs:element minOccurs="0" name="targetItem">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="version" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="targetWindow" type="xs:string"/>
<xs:element minOccurs="0" name="linkOrder" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="title" type="xs:string"/>
<xs:element minOccurs="0" name="launchDate" type="xs:string"/>
<xs:element minOccurs="0" name="dublinCore">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="version" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="dcAudience" type="xs:string"/>
<xs:element minOccurs="0" name="dcContributor" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverage" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoveragePostcode" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverageSpatialRef" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverageUnit" type="xs:string"/>
<xs:element minOccurs="0" name="dcDateValid" type="xs:string"/>
<xs:element minOccurs="0" name="dcDisposalReview" type="xs:string"/>
<xs:element minOccurs="0" name="dcLanguage" type="xs:string"/>
<xs:element minOccurs="0" name="dcTemporalBegin" type="xs:string"/>
<xs:element minOccurs="0" name="dcTemporalEnd" type="xs:string"/>
<xs:element minOccurs="0" name="dcCreatorOwner" type="xs:string"/>
<xs:element minOccurs="0" name="dcCreatorContact" type="xs:string"/>
<xs:element minOccurs="0" name="dcDescription" type="xs:string"/>
<xs:element minOccurs="0" name="dcIdentifier" type="xs:string"/>
<xs:element minOccurs="0" name="dcPreservation" type="xs:string"/>
<xs:element minOccurs="0" name="dcPublisher" type="xs:string"/>
<xs:element minOccurs="0" name="dcRelation" type="xs:string"/>
<xs:element minOccurs="0" name="dcRights" type="xs:string"/>
<xs:element minOccurs="0" name="dcSource" type="xs:string"/>
<xs:element minOccurs="0" name="dcKeywords" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="address" type="xs:string"/>
<xs:element minOccurs="0" name="postalCode" type="xs:string"/>
<xs:element minOccurs="0" name="phone" type="xs:string"/>
<xs:element minOccurs="0" name="mobile" type="xs:string"/>
<xs:element minOccurs="0" name="fax" type="xs:string"/>
<xs:element minOccurs="0" name="email" type="xs:string"/>
<xs:element minOccurs="0" name="notes" type="xs:string"/>
<xs:element minOccurs="0" name="uri" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,102 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://aplaws.org/schemas/content-types/com/arsdigita/cms/contenttypes/Agenda">
<xs:element name="object">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="objectType" type="xs:string"/>
<xs:element minOccurs="0" name="type">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="label" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="language" type="xs:string"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="fileAttachments">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="id" type="xs:double"/>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element maxOccurs="unbounded" minOccurs="0" name="links">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="linkTitle" type="xs:string"/>
<xs:element minOccurs="0" name="linkDescription" type="xs:string"/>
<xs:element name="targetType" type="xs:string"/>
<xs:element minOccurs="0" name="targetURI" type="xs:string"/>
<xs:element minOccurs="0" name="targetItem">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="version" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="targetWindow" type="xs:string"/>
<xs:element minOccurs="0" name="linkOrder" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="title" type="xs:string"/>
<xs:element minOccurs="0" name="launchDate" type="xs:string"/>
<xs:element minOccurs="0" name="dublinCore">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="version" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="dcAudience" type="xs:string"/>
<xs:element minOccurs="0" name="dcContributor" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverage" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoveragePostcode" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverageSpatialRef" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverageUnit" type="xs:string"/>
<xs:element minOccurs="0" name="dcDateValid" type="xs:string"/>
<xs:element minOccurs="0" name="dcDisposalReview" type="xs:string"/>
<xs:element minOccurs="0" name="dcLanguage" type="xs:string"/>
<xs:element minOccurs="0" name="dcTemporalBegin" type="xs:string"/>
<xs:element minOccurs="0" name="dcTemporalEnd" type="xs:string"/>
<xs:element minOccurs="0" name="dcCreatorOwner" type="xs:string"/>
<xs:element minOccurs="0" name="dcCreatorContact" type="xs:string"/>
<xs:element minOccurs="0" name="dcDescription" type="xs:string"/>
<xs:element minOccurs="0" name="dcIdentifier" type="xs:string"/>
<xs:element minOccurs="0" name="dcPreservation" type="xs:string"/>
<xs:element minOccurs="0" name="dcPublisher" type="xs:string"/>
<xs:element minOccurs="0" name="dcRelation" type="xs:string"/>
<xs:element minOccurs="0" name="dcRights" type="xs:string"/>
<xs:element minOccurs="0" name="dcSource" type="xs:string"/>
<xs:element minOccurs="0" name="dcKeywords" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="textAsset">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element minOccurs="0" name="description" type="xs:string"/>
<xs:element minOccurs="0" name="content" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="agendaDate" type="xs:string"/>
<xs:element minOccurs="0" name="location" type="xs:string"/>
<xs:element minOccurs="0" name="attendees" type="xs:string"/>
<xs:element minOccurs="0" name="subjectItems" type="xs:string"/>
<xs:element minOccurs="0" name="contactInfo" type="xs:string"/>
<xs:element minOccurs="0" name="summary" type="xs:string"/>
<xs:element minOccurs="0" name="creationDate" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,125 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://aplaws.org/schemas/content-types/com/arsdigita/cms/contenttypes/Article">
<xs:element name="object">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="objectType" type="xs:string"/>
<xs:element minOccurs="0" name="type">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="label" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="language" type="xs:string"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="fileAttachments">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="id" type="xs:double"/>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element maxOccurs="unbounded" minOccurs="0" name="links">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="linkTitle" type="xs:string"/>
<xs:element minOccurs="0" name="linkDescription" type="xs:string"/>
<xs:element name="targetType" type="xs:string"/>
<xs:element minOccurs="0" name="targetURI" type="xs:string"/>
<xs:element minOccurs="0" name="targetItem">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="version" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="targetWindow" type="xs:string"/>
<xs:element minOccurs="0" name="linkOrder" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="title" type="xs:string"/>
<xs:element minOccurs="0" name="launchDate" type="xs:string"/>
<xs:element minOccurs="0" name="dublinCore">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="version" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="dcAudience" type="xs:string"/>
<xs:element minOccurs="0" name="dcContributor" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverage" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoveragePostcode" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverageSpatialRef" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverageUnit" type="xs:string"/>
<xs:element minOccurs="0" name="dcDateValid" type="xs:string"/>
<xs:element minOccurs="0" name="dcDisposalReview" type="xs:string"/>
<xs:element minOccurs="0" name="dcLanguage" type="xs:string"/>
<xs:element minOccurs="0" name="dcTemporalBegin" type="xs:string"/>
<xs:element minOccurs="0" name="dcTemporalEnd" type="xs:string"/>
<xs:element minOccurs="0" name="dcCreatorOwner" type="xs:string"/>
<xs:element minOccurs="0" name="dcCreatorContact" type="xs:string"/>
<xs:element minOccurs="0" name="dcDescription" type="xs:string"/>
<xs:element minOccurs="0" name="dcIdentifier" type="xs:string"/>
<xs:element minOccurs="0" name="dcPreservation" type="xs:string"/>
<xs:element minOccurs="0" name="dcPublisher" type="xs:string"/>
<xs:element minOccurs="0" name="dcRelation" type="xs:string"/>
<xs:element minOccurs="0" name="dcRights" type="xs:string"/>
<xs:element minOccurs="0" name="dcSource" type="xs:string"/>
<xs:element minOccurs="0" name="dcKeywords" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="textAsset">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element minOccurs="0" name="description" type="xs:string"/>
<xs:element minOccurs="0" name="content" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element maxOccurs="unbounded" minOccurs="0" name="imageCaptions">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element minOccurs="0" name="caption" type="xs:string"/>
<xs:element minOccurs="0" name="imageAsset">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="id" type="xs:double"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
<xs:element minOccurs="0" name="mimeType">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="mimeType" type="xs:string"/>
<xs:element name="label" type="xs:string"/>
<xs:element name="fileExtension" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="width" type="xs:double"/>
<xs:element minOccurs="0" name="height" type="xs:double"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="lead" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://aplaws.org/schemas/content-types/com/arsdigita/cms/contenttypes/ArticleSection">
<xs:element name="object">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="objectType" type="xs:string"/>
<xs:element minOccurs="0" name="type">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="label" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="language" type="xs:string"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="fileAttachments">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="id" type="xs:double"/>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element maxOccurs="unbounded" minOccurs="0" name="links">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="linkTitle" type="xs:string"/>
<xs:element minOccurs="0" name="linkDescription" type="xs:string"/>
<xs:element name="targetType" type="xs:string"/>
<xs:element minOccurs="0" name="targetURI" type="xs:string"/>
<xs:element minOccurs="0" name="targetItem">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="version" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="targetWindow" type="xs:string"/>
<xs:element minOccurs="0" name="linkOrder" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="title" type="xs:string"/>
<xs:element minOccurs="0" name="launchDate" type="xs:string"/>
<xs:element minOccurs="0" name="dublinCore">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="version" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="dcAudience" type="xs:string"/>
<xs:element minOccurs="0" name="dcContributor" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverage" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoveragePostcode" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverageSpatialRef" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverageUnit" type="xs:string"/>
<xs:element minOccurs="0" name="dcDateValid" type="xs:string"/>
<xs:element minOccurs="0" name="dcDisposalReview" type="xs:string"/>
<xs:element minOccurs="0" name="dcLanguage" type="xs:string"/>
<xs:element minOccurs="0" name="dcTemporalBegin" type="xs:string"/>
<xs:element minOccurs="0" name="dcTemporalEnd" type="xs:string"/>
<xs:element minOccurs="0" name="dcCreatorOwner" type="xs:string"/>
<xs:element minOccurs="0" name="dcCreatorContact" type="xs:string"/>
<xs:element minOccurs="0" name="dcDescription" type="xs:string"/>
<xs:element minOccurs="0" name="dcIdentifier" type="xs:string"/>
<xs:element minOccurs="0" name="dcPreservation" type="xs:string"/>
<xs:element minOccurs="0" name="dcPublisher" type="xs:string"/>
<xs:element minOccurs="0" name="dcRelation" type="xs:string"/>
<xs:element minOccurs="0" name="dcRights" type="xs:string"/>
<xs:element minOccurs="0" name="dcSource" type="xs:string"/>
<xs:element minOccurs="0" name="dcKeywords" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="rank" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,106 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://aplaws.org/schemas/content-types/com/arsdigita/cms/contenttypes/Event">
<xs:element name="object">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="objectType" type="xs:string"/>
<xs:element minOccurs="0" name="type">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="label" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="language" type="xs:string"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="fileAttachments">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="id" type="xs:double"/>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element maxOccurs="unbounded" minOccurs="0" name="links">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="linkTitle" type="xs:string"/>
<xs:element minOccurs="0" name="linkDescription" type="xs:string"/>
<xs:element name="targetType" type="xs:string"/>
<xs:element minOccurs="0" name="targetURI" type="xs:string"/>
<xs:element minOccurs="0" name="targetItem">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="version" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="targetWindow" type="xs:string"/>
<xs:element minOccurs="0" name="linkOrder" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="title" type="xs:string"/>
<xs:element minOccurs="0" name="launchDate" type="xs:string"/>
<xs:element minOccurs="0" name="dublinCore">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="version" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="dcAudience" type="xs:string"/>
<xs:element minOccurs="0" name="dcContributor" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverage" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoveragePostcode" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverageSpatialRef" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverageUnit" type="xs:string"/>
<xs:element minOccurs="0" name="dcDateValid" type="xs:string"/>
<xs:element minOccurs="0" name="dcDisposalReview" type="xs:string"/>
<xs:element minOccurs="0" name="dcLanguage" type="xs:string"/>
<xs:element minOccurs="0" name="dcTemporalBegin" type="xs:string"/>
<xs:element minOccurs="0" name="dcTemporalEnd" type="xs:string"/>
<xs:element minOccurs="0" name="dcCreatorOwner" type="xs:string"/>
<xs:element minOccurs="0" name="dcCreatorContact" type="xs:string"/>
<xs:element minOccurs="0" name="dcDescription" type="xs:string"/>
<xs:element minOccurs="0" name="dcIdentifier" type="xs:string"/>
<xs:element minOccurs="0" name="dcPreservation" type="xs:string"/>
<xs:element minOccurs="0" name="dcPublisher" type="xs:string"/>
<xs:element minOccurs="0" name="dcRelation" type="xs:string"/>
<xs:element minOccurs="0" name="dcRights" type="xs:string"/>
<xs:element minOccurs="0" name="dcSource" type="xs:string"/>
<xs:element minOccurs="0" name="dcKeywords" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="textAsset">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element minOccurs="0" name="description" type="xs:string"/>
<xs:element minOccurs="0" name="content" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="startDate" type="xs:string"/>
<xs:element minOccurs="0" name="endDate" type="xs:string"/>
<xs:element minOccurs="0" name="startTime" type="xs:string"/>
<xs:element minOccurs="0" name="endTime" type="xs:string"/>
<xs:element minOccurs="0" name="eventDate" type="xs:string"/>
<xs:element minOccurs="0" name="location" type="xs:string"/>
<xs:element minOccurs="0" name="lead" type="xs:string"/>
<xs:element minOccurs="0" name="mainContributor" type="xs:string"/>
<xs:element minOccurs="0" name="eventType" type="xs:string"/>
<xs:element minOccurs="0" name="mapLink" type="xs:string"/>
<xs:element minOccurs="0" name="cost" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,88 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://aplaws.org/schemas/content-types/com/arsdigita/cms/contenttypes/FAQItem">
<xs:element name="object">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="objectType" type="xs:string"/>
<xs:element minOccurs="0" name="type">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="label" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="language" type="xs:string"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="fileAttachments">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="id" type="xs:double"/>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element maxOccurs="unbounded" minOccurs="0" name="links">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="linkTitle" type="xs:string"/>
<xs:element minOccurs="0" name="linkDescription" type="xs:string"/>
<xs:element name="targetType" type="xs:string"/>
<xs:element minOccurs="0" name="targetURI" type="xs:string"/>
<xs:element minOccurs="0" name="targetItem">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="version" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="targetWindow" type="xs:string"/>
<xs:element minOccurs="0" name="linkOrder" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="title" type="xs:string"/>
<xs:element minOccurs="0" name="launchDate" type="xs:string"/>
<xs:element minOccurs="0" name="dublinCore">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="version" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="dcAudience" type="xs:string"/>
<xs:element minOccurs="0" name="dcContributor" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverage" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoveragePostcode" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverageSpatialRef" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverageUnit" type="xs:string"/>
<xs:element minOccurs="0" name="dcDateValid" type="xs:string"/>
<xs:element minOccurs="0" name="dcDisposalReview" type="xs:string"/>
<xs:element minOccurs="0" name="dcLanguage" type="xs:string"/>
<xs:element minOccurs="0" name="dcTemporalBegin" type="xs:string"/>
<xs:element minOccurs="0" name="dcTemporalEnd" type="xs:string"/>
<xs:element minOccurs="0" name="dcCreatorOwner" type="xs:string"/>
<xs:element minOccurs="0" name="dcCreatorContact" type="xs:string"/>
<xs:element minOccurs="0" name="dcDescription" type="xs:string"/>
<xs:element minOccurs="0" name="dcIdentifier" type="xs:string"/>
<xs:element minOccurs="0" name="dcPreservation" type="xs:string"/>
<xs:element minOccurs="0" name="dcPublisher" type="xs:string"/>
<xs:element minOccurs="0" name="dcRelation" type="xs:string"/>
<xs:element minOccurs="0" name="dcRights" type="xs:string"/>
<xs:element minOccurs="0" name="dcSource" type="xs:string"/>
<xs:element minOccurs="0" name="dcKeywords" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="question" type="xs:string"/>
<xs:element name="answer" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://aplaws.org/schemas/content-types/com/arsdigita/cms/contenttypes/FileStorageItem">
<xs:element name="object">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="objectType" type="xs:string"/>
<xs:element minOccurs="0" name="type">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="label" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="language" type="xs:string"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="fileAttachments">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="id" type="xs:double"/>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element maxOccurs="unbounded" minOccurs="0" name="links">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="linkTitle" type="xs:string"/>
<xs:element minOccurs="0" name="linkDescription" type="xs:string"/>
<xs:element name="targetType" type="xs:string"/>
<xs:element minOccurs="0" name="targetURI" type="xs:string"/>
<xs:element minOccurs="0" name="targetItem">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="version" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="targetWindow" type="xs:string"/>
<xs:element minOccurs="0" name="linkOrder" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="title" type="xs:string"/>
<xs:element minOccurs="0" name="launchDate" type="xs:string"/>
<xs:element minOccurs="0" name="dublinCore">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="version" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="dcAudience" type="xs:string"/>
<xs:element minOccurs="0" name="dcContributor" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverage" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoveragePostcode" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverageSpatialRef" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverageUnit" type="xs:string"/>
<xs:element minOccurs="0" name="dcDateValid" type="xs:string"/>
<xs:element minOccurs="0" name="dcDisposalReview" type="xs:string"/>
<xs:element minOccurs="0" name="dcLanguage" type="xs:string"/>
<xs:element minOccurs="0" name="dcTemporalBegin" type="xs:string"/>
<xs:element minOccurs="0" name="dcTemporalEnd" type="xs:string"/>
<xs:element minOccurs="0" name="dcCreatorOwner" type="xs:string"/>
<xs:element minOccurs="0" name="dcCreatorContact" type="xs:string"/>
<xs:element minOccurs="0" name="dcDescription" type="xs:string"/>
<xs:element minOccurs="0" name="dcIdentifier" type="xs:string"/>
<xs:element minOccurs="0" name="dcPreservation" type="xs:string"/>
<xs:element minOccurs="0" name="dcPublisher" type="xs:string"/>
<xs:element minOccurs="0" name="dcRelation" type="xs:string"/>
<xs:element minOccurs="0" name="dcRights" type="xs:string"/>
<xs:element minOccurs="0" name="dcSource" type="xs:string"/>
<xs:element minOccurs="0" name="dcKeywords" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://aplaws.org/schemas/content-types/com/arsdigita/cms/contenttypes/GlossaryItem">
<xs:element name="object">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="objectType" type="xs:string"/>
<xs:element minOccurs="0" name="type">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="label" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="language" type="xs:string"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="fileAttachments">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="id" type="xs:double"/>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element maxOccurs="unbounded" minOccurs="0" name="links">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="linkTitle" type="xs:string"/>
<xs:element minOccurs="0" name="linkDescription" type="xs:string"/>
<xs:element name="targetType" type="xs:string"/>
<xs:element minOccurs="0" name="targetURI" type="xs:string"/>
<xs:element minOccurs="0" name="targetItem">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="version" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="targetWindow" type="xs:string"/>
<xs:element minOccurs="0" name="linkOrder" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="title" type="xs:string"/>
<xs:element minOccurs="0" name="launchDate" type="xs:string"/>
<xs:element minOccurs="0" name="dublinCore">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="version" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="dcAudience" type="xs:string"/>
<xs:element minOccurs="0" name="dcContributor" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverage" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoveragePostcode" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverageSpatialRef" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverageUnit" type="xs:string"/>
<xs:element minOccurs="0" name="dcDateValid" type="xs:string"/>
<xs:element minOccurs="0" name="dcDisposalReview" type="xs:string"/>
<xs:element minOccurs="0" name="dcLanguage" type="xs:string"/>
<xs:element minOccurs="0" name="dcTemporalBegin" type="xs:string"/>
<xs:element minOccurs="0" name="dcTemporalEnd" type="xs:string"/>
<xs:element minOccurs="0" name="dcCreatorOwner" type="xs:string"/>
<xs:element minOccurs="0" name="dcCreatorContact" type="xs:string"/>
<xs:element minOccurs="0" name="dcDescription" type="xs:string"/>
<xs:element minOccurs="0" name="dcIdentifier" type="xs:string"/>
<xs:element minOccurs="0" name="dcPreservation" type="xs:string"/>
<xs:element minOccurs="0" name="dcPublisher" type="xs:string"/>
<xs:element minOccurs="0" name="dcRelation" type="xs:string"/>
<xs:element minOccurs="0" name="dcRights" type="xs:string"/>
<xs:element minOccurs="0" name="dcSource" type="xs:string"/>
<xs:element minOccurs="0" name="dcKeywords" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="definition" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,95 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://aplaws.org/schemas/content-types/com/arsdigita/cms/contenttypes/Job">
<xs:element name="object">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="objectType" type="xs:string"/>
<xs:element minOccurs="0" name="type">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="label" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="language" type="xs:string"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="fileAttachments">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="id" type="xs:double"/>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element maxOccurs="unbounded" minOccurs="0" name="links">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="linkTitle" type="xs:string"/>
<xs:element minOccurs="0" name="linkDescription" type="xs:string"/>
<xs:element name="targetType" type="xs:string"/>
<xs:element minOccurs="0" name="targetURI" type="xs:string"/>
<xs:element minOccurs="0" name="targetItem">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="version" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="targetWindow" type="xs:string"/>
<xs:element minOccurs="0" name="linkOrder" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="title" type="xs:string"/>
<xs:element minOccurs="0" name="launchDate" type="xs:string"/>
<xs:element minOccurs="0" name="dublinCore">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="version" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="dcAudience" type="xs:string"/>
<xs:element minOccurs="0" name="dcContributor" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverage" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoveragePostcode" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverageSpatialRef" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverageUnit" type="xs:string"/>
<xs:element minOccurs="0" name="dcDateValid" type="xs:string"/>
<xs:element minOccurs="0" name="dcDisposalReview" type="xs:string"/>
<xs:element minOccurs="0" name="dcLanguage" type="xs:string"/>
<xs:element minOccurs="0" name="dcTemporalBegin" type="xs:string"/>
<xs:element minOccurs="0" name="dcTemporalEnd" type="xs:string"/>
<xs:element minOccurs="0" name="dcCreatorOwner" type="xs:string"/>
<xs:element minOccurs="0" name="dcCreatorContact" type="xs:string"/>
<xs:element minOccurs="0" name="dcDescription" type="xs:string"/>
<xs:element minOccurs="0" name="dcIdentifier" type="xs:string"/>
<xs:element minOccurs="0" name="dcPreservation" type="xs:string"/>
<xs:element minOccurs="0" name="dcPublisher" type="xs:string"/>
<xs:element minOccurs="0" name="dcRelation" type="xs:string"/>
<xs:element minOccurs="0" name="dcRights" type="xs:string"/>
<xs:element minOccurs="0" name="dcSource" type="xs:string"/>
<xs:element minOccurs="0" name="dcKeywords" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="grade" type="xs:string"/>
<xs:element minOccurs="0" name="closingDate" type="xs:string"/>
<xs:element minOccurs="0" name="salary" type="xs:string"/>
<xs:element minOccurs="0" name="body" type="xs:string"/>
<xs:element minOccurs="0" name="refNumber" type="xs:string"/>
<xs:element minOccurs="0" name="department" type="xs:string"/>
<xs:element minOccurs="0" name="jobDescription" type="xs:string"/>
<xs:element minOccurs="0" name="personSpecification" type="xs:string"/>
<xs:element minOccurs="0" name="contactDetails" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,96 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://aplaws.org/schemas/content-types/com/arsdigita/cms/contenttypes/LegalNotice">
<xs:element name="object">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="objectType" type="xs:string"/>
<xs:element minOccurs="0" name="type">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="label" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="language" type="xs:string"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="fileAttachments">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="id" type="xs:double"/>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element maxOccurs="unbounded" minOccurs="0" name="links">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="linkTitle" type="xs:string"/>
<xs:element minOccurs="0" name="linkDescription" type="xs:string"/>
<xs:element name="targetType" type="xs:string"/>
<xs:element minOccurs="0" name="targetURI" type="xs:string"/>
<xs:element minOccurs="0" name="targetItem">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="version" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="targetWindow" type="xs:string"/>
<xs:element minOccurs="0" name="linkOrder" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="title" type="xs:string"/>
<xs:element minOccurs="0" name="launchDate" type="xs:string"/>
<xs:element minOccurs="0" name="dublinCore">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="version" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="dcAudience" type="xs:string"/>
<xs:element minOccurs="0" name="dcContributor" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverage" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoveragePostcode" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverageSpatialRef" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverageUnit" type="xs:string"/>
<xs:element minOccurs="0" name="dcDateValid" type="xs:string"/>
<xs:element minOccurs="0" name="dcDisposalReview" type="xs:string"/>
<xs:element minOccurs="0" name="dcLanguage" type="xs:string"/>
<xs:element minOccurs="0" name="dcTemporalBegin" type="xs:string"/>
<xs:element minOccurs="0" name="dcTemporalEnd" type="xs:string"/>
<xs:element minOccurs="0" name="dcCreatorOwner" type="xs:string"/>
<xs:element minOccurs="0" name="dcCreatorContact" type="xs:string"/>
<xs:element minOccurs="0" name="dcDescription" type="xs:string"/>
<xs:element minOccurs="0" name="dcIdentifier" type="xs:string"/>
<xs:element minOccurs="0" name="dcPreservation" type="xs:string"/>
<xs:element minOccurs="0" name="dcPublisher" type="xs:string"/>
<xs:element minOccurs="0" name="dcRelation" type="xs:string"/>
<xs:element minOccurs="0" name="dcRights" type="xs:string"/>
<xs:element minOccurs="0" name="dcSource" type="xs:string"/>
<xs:element minOccurs="0" name="dcKeywords" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="textAsset">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element minOccurs="0" name="description" type="xs:string"/>
<xs:element minOccurs="0" name="content" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="governmentUID" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://aplaws.org/schemas/content-types/com/arsdigita/cms/contenttypes/MOTDItem">
<xs:element name="object">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="objectType" type="xs:string"/>
<xs:element minOccurs="0" name="type">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="label" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="language" type="xs:string"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="fileAttachments">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="id" type="xs:double"/>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element maxOccurs="unbounded" minOccurs="0" name="links">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="linkTitle" type="xs:string"/>
<xs:element minOccurs="0" name="linkDescription" type="xs:string"/>
<xs:element name="targetType" type="xs:string"/>
<xs:element minOccurs="0" name="targetURI" type="xs:string"/>
<xs:element minOccurs="0" name="targetItem">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="version" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="targetWindow" type="xs:string"/>
<xs:element minOccurs="0" name="linkOrder" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="title" type="xs:string"/>
<xs:element minOccurs="0" name="launchDate" type="xs:string"/>
<xs:element minOccurs="0" name="dublinCore">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="version" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="dcAudience" type="xs:string"/>
<xs:element minOccurs="0" name="dcContributor" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverage" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoveragePostcode" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverageSpatialRef" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverageUnit" type="xs:string"/>
<xs:element minOccurs="0" name="dcDateValid" type="xs:string"/>
<xs:element minOccurs="0" name="dcDisposalReview" type="xs:string"/>
<xs:element minOccurs="0" name="dcLanguage" type="xs:string"/>
<xs:element minOccurs="0" name="dcTemporalBegin" type="xs:string"/>
<xs:element minOccurs="0" name="dcTemporalEnd" type="xs:string"/>
<xs:element minOccurs="0" name="dcCreatorOwner" type="xs:string"/>
<xs:element minOccurs="0" name="dcCreatorContact" type="xs:string"/>
<xs:element minOccurs="0" name="dcDescription" type="xs:string"/>
<xs:element minOccurs="0" name="dcIdentifier" type="xs:string"/>
<xs:element minOccurs="0" name="dcPreservation" type="xs:string"/>
<xs:element minOccurs="0" name="dcPublisher" type="xs:string"/>
<xs:element minOccurs="0" name="dcRelation" type="xs:string"/>
<xs:element minOccurs="0" name="dcRights" type="xs:string"/>
<xs:element minOccurs="0" name="dcSource" type="xs:string"/>
<xs:element minOccurs="0" name="dcKeywords" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="message" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,36 @@
SERVER = http://dev.london.redhat.com:9068/
types = Address \
Agenda \
Article \
Event \
FileStorageItem \
Job \
LegalNotice \
Minutes \
MultiPartArticle \
ArticleSection \
NewsItem \
PressRelease \
Service \
FAQItem \
GlossaryItem \
MOTDItem \
Organization
schemas = $(types:%=%.xsd)
all: ct-schemas.html
ct-schemas.html: ct-schemas.htmc $(schemas)
htmltoc.pl $< > $@
%.xsd:
wget -O $@.raw '$(SERVER)aplaws/schema.jsp?type=com.arsdigita.cms.contenttypes.$(@:%.xsd=%)&context=com.arsdigita.cms.dispatcher.SimpleXMLGenerator&wrapAttr=true&wrapRoot=false'
xmllint -format $@.raw > $@
rm $@.raw
clean:
rm -f $(schemas) ct-schemas.html *.bak *~

View File

@ -0,0 +1,100 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://aplaws.org/schemas/content-types/com/arsdigita/cms/contenttypes/Minutes">
<xs:element name="object">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="objectType" type="xs:string"/>
<xs:element minOccurs="0" name="type">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="label" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="language" type="xs:string"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="fileAttachments">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="id" type="xs:double"/>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element maxOccurs="unbounded" minOccurs="0" name="links">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="linkTitle" type="xs:string"/>
<xs:element minOccurs="0" name="linkDescription" type="xs:string"/>
<xs:element name="targetType" type="xs:string"/>
<xs:element minOccurs="0" name="targetURI" type="xs:string"/>
<xs:element minOccurs="0" name="targetItem">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="version" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="targetWindow" type="xs:string"/>
<xs:element minOccurs="0" name="linkOrder" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="title" type="xs:string"/>
<xs:element minOccurs="0" name="launchDate" type="xs:string"/>
<xs:element minOccurs="0" name="dublinCore">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="version" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="dcAudience" type="xs:string"/>
<xs:element minOccurs="0" name="dcContributor" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverage" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoveragePostcode" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverageSpatialRef" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverageUnit" type="xs:string"/>
<xs:element minOccurs="0" name="dcDateValid" type="xs:string"/>
<xs:element minOccurs="0" name="dcDisposalReview" type="xs:string"/>
<xs:element minOccurs="0" name="dcLanguage" type="xs:string"/>
<xs:element minOccurs="0" name="dcTemporalBegin" type="xs:string"/>
<xs:element minOccurs="0" name="dcTemporalEnd" type="xs:string"/>
<xs:element minOccurs="0" name="dcCreatorOwner" type="xs:string"/>
<xs:element minOccurs="0" name="dcCreatorContact" type="xs:string"/>
<xs:element minOccurs="0" name="dcDescription" type="xs:string"/>
<xs:element minOccurs="0" name="dcIdentifier" type="xs:string"/>
<xs:element minOccurs="0" name="dcPreservation" type="xs:string"/>
<xs:element minOccurs="0" name="dcPublisher" type="xs:string"/>
<xs:element minOccurs="0" name="dcRelation" type="xs:string"/>
<xs:element minOccurs="0" name="dcRights" type="xs:string"/>
<xs:element minOccurs="0" name="dcSource" type="xs:string"/>
<xs:element minOccurs="0" name="dcKeywords" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="textAsset">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element minOccurs="0" name="description" type="xs:string"/>
<xs:element minOccurs="0" name="content" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="minuteNumber" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
<xs:element minOccurs="0" name="actionItem" type="xs:string"/>
<xs:element minOccurs="0" name="attendees" type="xs:string"/>
<xs:element minOccurs="0" name="descriptionOfMinutes" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,87 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://aplaws.org/schemas/content-types/com/arsdigita/cms/contenttypes/MultiPartArticle">
<xs:element name="object">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="objectType" type="xs:string"/>
<xs:element minOccurs="0" name="type">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="label" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="language" type="xs:string"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="fileAttachments">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="id" type="xs:double"/>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element maxOccurs="unbounded" minOccurs="0" name="links">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="linkTitle" type="xs:string"/>
<xs:element minOccurs="0" name="linkDescription" type="xs:string"/>
<xs:element name="targetType" type="xs:string"/>
<xs:element minOccurs="0" name="targetURI" type="xs:string"/>
<xs:element minOccurs="0" name="targetItem">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="version" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="targetWindow" type="xs:string"/>
<xs:element minOccurs="0" name="linkOrder" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="title" type="xs:string"/>
<xs:element minOccurs="0" name="launchDate" type="xs:string"/>
<xs:element minOccurs="0" name="dublinCore">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="version" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="dcAudience" type="xs:string"/>
<xs:element minOccurs="0" name="dcContributor" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverage" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoveragePostcode" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverageSpatialRef" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverageUnit" type="xs:string"/>
<xs:element minOccurs="0" name="dcDateValid" type="xs:string"/>
<xs:element minOccurs="0" name="dcDisposalReview" type="xs:string"/>
<xs:element minOccurs="0" name="dcLanguage" type="xs:string"/>
<xs:element minOccurs="0" name="dcTemporalBegin" type="xs:string"/>
<xs:element minOccurs="0" name="dcTemporalEnd" type="xs:string"/>
<xs:element minOccurs="0" name="dcCreatorOwner" type="xs:string"/>
<xs:element minOccurs="0" name="dcCreatorContact" type="xs:string"/>
<xs:element minOccurs="0" name="dcDescription" type="xs:string"/>
<xs:element minOccurs="0" name="dcIdentifier" type="xs:string"/>
<xs:element minOccurs="0" name="dcPreservation" type="xs:string"/>
<xs:element minOccurs="0" name="dcPublisher" type="xs:string"/>
<xs:element minOccurs="0" name="dcRelation" type="xs:string"/>
<xs:element minOccurs="0" name="dcRights" type="xs:string"/>
<xs:element minOccurs="0" name="dcSource" type="xs:string"/>
<xs:element minOccurs="0" name="dcKeywords" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="summary" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,127 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://aplaws.org/schemas/content-types/com/arsdigita/cms/contenttypes/NewsItem">
<xs:element name="object">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="objectType" type="xs:string"/>
<xs:element minOccurs="0" name="type">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="label" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="language" type="xs:string"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="fileAttachments">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="id" type="xs:double"/>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element maxOccurs="unbounded" minOccurs="0" name="links">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="linkTitle" type="xs:string"/>
<xs:element minOccurs="0" name="linkDescription" type="xs:string"/>
<xs:element name="targetType" type="xs:string"/>
<xs:element minOccurs="0" name="targetURI" type="xs:string"/>
<xs:element minOccurs="0" name="targetItem">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="version" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="targetWindow" type="xs:string"/>
<xs:element minOccurs="0" name="linkOrder" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="title" type="xs:string"/>
<xs:element minOccurs="0" name="launchDate" type="xs:string"/>
<xs:element minOccurs="0" name="dublinCore">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="version" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="dcAudience" type="xs:string"/>
<xs:element minOccurs="0" name="dcContributor" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverage" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoveragePostcode" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverageSpatialRef" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverageUnit" type="xs:string"/>
<xs:element minOccurs="0" name="dcDateValid" type="xs:string"/>
<xs:element minOccurs="0" name="dcDisposalReview" type="xs:string"/>
<xs:element minOccurs="0" name="dcLanguage" type="xs:string"/>
<xs:element minOccurs="0" name="dcTemporalBegin" type="xs:string"/>
<xs:element minOccurs="0" name="dcTemporalEnd" type="xs:string"/>
<xs:element minOccurs="0" name="dcCreatorOwner" type="xs:string"/>
<xs:element minOccurs="0" name="dcCreatorContact" type="xs:string"/>
<xs:element minOccurs="0" name="dcDescription" type="xs:string"/>
<xs:element minOccurs="0" name="dcIdentifier" type="xs:string"/>
<xs:element minOccurs="0" name="dcPreservation" type="xs:string"/>
<xs:element minOccurs="0" name="dcPublisher" type="xs:string"/>
<xs:element minOccurs="0" name="dcRelation" type="xs:string"/>
<xs:element minOccurs="0" name="dcRights" type="xs:string"/>
<xs:element minOccurs="0" name="dcSource" type="xs:string"/>
<xs:element minOccurs="0" name="dcKeywords" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="textAsset">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element minOccurs="0" name="description" type="xs:string"/>
<xs:element minOccurs="0" name="content" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element maxOccurs="unbounded" minOccurs="0" name="imageCaptions">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element minOccurs="0" name="caption" type="xs:string"/>
<xs:element minOccurs="0" name="imageAsset">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="id" type="xs:double"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
<xs:element minOccurs="0" name="mimeType">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="mimeType" type="xs:string"/>
<xs:element name="label" type="xs:string"/>
<xs:element name="fileExtension" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="width" type="xs:double"/>
<xs:element minOccurs="0" name="height" type="xs:double"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="lead" type="xs:string"/>
<xs:element minOccurs="0" name="newsDate" type="xs:string"/>
<xs:element name="isHomepage" type="xs:boolean"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,89 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://aplaws.org/schemas/content-types/com/arsdigita/cms/contenttypes/Organization">
<xs:element name="object">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="objectType" type="xs:string"/>
<xs:element minOccurs="0" name="type">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="label" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="language" type="xs:string"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="fileAttachments">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="id" type="xs:double"/>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element maxOccurs="unbounded" minOccurs="0" name="links">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="linkTitle" type="xs:string"/>
<xs:element minOccurs="0" name="linkDescription" type="xs:string"/>
<xs:element name="targetType" type="xs:string"/>
<xs:element minOccurs="0" name="targetURI" type="xs:string"/>
<xs:element minOccurs="0" name="targetItem">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="version" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="targetWindow" type="xs:string"/>
<xs:element minOccurs="0" name="linkOrder" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="title" type="xs:string"/>
<xs:element minOccurs="0" name="launchDate" type="xs:string"/>
<xs:element minOccurs="0" name="dublinCore">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="version" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="dcAudience" type="xs:string"/>
<xs:element minOccurs="0" name="dcContributor" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverage" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoveragePostcode" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverageSpatialRef" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverageUnit" type="xs:string"/>
<xs:element minOccurs="0" name="dcDateValid" type="xs:string"/>
<xs:element minOccurs="0" name="dcDisposalReview" type="xs:string"/>
<xs:element minOccurs="0" name="dcLanguage" type="xs:string"/>
<xs:element minOccurs="0" name="dcTemporalBegin" type="xs:string"/>
<xs:element minOccurs="0" name="dcTemporalEnd" type="xs:string"/>
<xs:element minOccurs="0" name="dcCreatorOwner" type="xs:string"/>
<xs:element minOccurs="0" name="dcCreatorContact" type="xs:string"/>
<xs:element minOccurs="0" name="dcDescription" type="xs:string"/>
<xs:element minOccurs="0" name="dcIdentifier" type="xs:string"/>
<xs:element minOccurs="0" name="dcPreservation" type="xs:string"/>
<xs:element minOccurs="0" name="dcPublisher" type="xs:string"/>
<xs:element minOccurs="0" name="dcRelation" type="xs:string"/>
<xs:element minOccurs="0" name="dcRights" type="xs:string"/>
<xs:element minOccurs="0" name="dcSource" type="xs:string"/>
<xs:element minOccurs="0" name="dcKeywords" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="link" type="xs:string"/>
<xs:element minOccurs="0" name="contact" type="xs:string"/>
<xs:element minOccurs="0" name="imageID" type="xs:double"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,98 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://aplaws.org/schemas/content-types/com/arsdigita/cms/contenttypes/PressRelease">
<xs:element name="object">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="objectType" type="xs:string"/>
<xs:element minOccurs="0" name="type">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="label" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="language" type="xs:string"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="fileAttachments">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="id" type="xs:double"/>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element maxOccurs="unbounded" minOccurs="0" name="links">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="linkTitle" type="xs:string"/>
<xs:element minOccurs="0" name="linkDescription" type="xs:string"/>
<xs:element name="targetType" type="xs:string"/>
<xs:element minOccurs="0" name="targetURI" type="xs:string"/>
<xs:element minOccurs="0" name="targetItem">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="version" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="targetWindow" type="xs:string"/>
<xs:element minOccurs="0" name="linkOrder" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="title" type="xs:string"/>
<xs:element minOccurs="0" name="launchDate" type="xs:string"/>
<xs:element minOccurs="0" name="dublinCore">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="version" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="dcAudience" type="xs:string"/>
<xs:element minOccurs="0" name="dcContributor" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverage" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoveragePostcode" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverageSpatialRef" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverageUnit" type="xs:string"/>
<xs:element minOccurs="0" name="dcDateValid" type="xs:string"/>
<xs:element minOccurs="0" name="dcDisposalReview" type="xs:string"/>
<xs:element minOccurs="0" name="dcLanguage" type="xs:string"/>
<xs:element minOccurs="0" name="dcTemporalBegin" type="xs:string"/>
<xs:element minOccurs="0" name="dcTemporalEnd" type="xs:string"/>
<xs:element minOccurs="0" name="dcCreatorOwner" type="xs:string"/>
<xs:element minOccurs="0" name="dcCreatorContact" type="xs:string"/>
<xs:element minOccurs="0" name="dcDescription" type="xs:string"/>
<xs:element minOccurs="0" name="dcIdentifier" type="xs:string"/>
<xs:element minOccurs="0" name="dcPreservation" type="xs:string"/>
<xs:element minOccurs="0" name="dcPublisher" type="xs:string"/>
<xs:element minOccurs="0" name="dcRelation" type="xs:string"/>
<xs:element minOccurs="0" name="dcRights" type="xs:string"/>
<xs:element minOccurs="0" name="dcSource" type="xs:string"/>
<xs:element minOccurs="0" name="dcKeywords" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="textAsset">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element minOccurs="0" name="description" type="xs:string"/>
<xs:element minOccurs="0" name="content" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="contactInfo" type="xs:string"/>
<xs:element minOccurs="0" name="summary" type="xs:string"/>
<xs:element minOccurs="0" name="referenceCode" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://aplaws.org/schemas/content-types/com/arsdigita/cms/contenttypes/Service">
<xs:element name="object">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="objectType" type="xs:string"/>
<xs:element minOccurs="0" name="type">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="label" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="language" type="xs:string"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="fileAttachments">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="id" type="xs:double"/>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="description" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element maxOccurs="unbounded" minOccurs="0" name="links">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="linkTitle" type="xs:string"/>
<xs:element minOccurs="0" name="linkDescription" type="xs:string"/>
<xs:element name="targetType" type="xs:string"/>
<xs:element minOccurs="0" name="targetURI" type="xs:string"/>
<xs:element minOccurs="0" name="targetItem">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="version" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="targetWindow" type="xs:string"/>
<xs:element minOccurs="0" name="linkOrder" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="title" type="xs:string"/>
<xs:element minOccurs="0" name="launchDate" type="xs:string"/>
<xs:element minOccurs="0" name="dublinCore">
<xs:complexType>
<xs:attribute name="oid" type="xs:string"/>
<xs:sequence>
<xs:element name="version" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element minOccurs="0" name="dcAudience" type="xs:string"/>
<xs:element minOccurs="0" name="dcContributor" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverage" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoveragePostcode" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverageSpatialRef" type="xs:string"/>
<xs:element minOccurs="0" name="dcCoverageUnit" type="xs:string"/>
<xs:element minOccurs="0" name="dcDateValid" type="xs:string"/>
<xs:element minOccurs="0" name="dcDisposalReview" type="xs:string"/>
<xs:element minOccurs="0" name="dcLanguage" type="xs:string"/>
<xs:element minOccurs="0" name="dcTemporalBegin" type="xs:string"/>
<xs:element minOccurs="0" name="dcTemporalEnd" type="xs:string"/>
<xs:element minOccurs="0" name="dcCreatorOwner" type="xs:string"/>
<xs:element minOccurs="0" name="dcCreatorContact" type="xs:string"/>
<xs:element minOccurs="0" name="dcDescription" type="xs:string"/>
<xs:element minOccurs="0" name="dcIdentifier" type="xs:string"/>
<xs:element minOccurs="0" name="dcPreservation" type="xs:string"/>
<xs:element minOccurs="0" name="dcPublisher" type="xs:string"/>
<xs:element minOccurs="0" name="dcRelation" type="xs:string"/>
<xs:element minOccurs="0" name="dcRights" type="xs:string"/>
<xs:element minOccurs="0" name="dcSource" type="xs:string"/>
<xs:element minOccurs="0" name="dcKeywords" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element minOccurs="0" name="summary" type="xs:string"/>
<xs:element minOccurs="0" name="servicesProvided" type="xs:string"/>
<xs:element minOccurs="0" name="openingTimes" type="xs:string"/>
<xs:element minOccurs="0" name="address" type="xs:string"/>
<xs:element minOccurs="0" name="contacts" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

View File

@ -0,0 +1,145 @@
<html>
<head>
<!-- WARNING -->
<title>APLAWS-II: Content Type Schemas</title>
<style>
.schema {
border: 1px solid black;
margin: 1em;
padding: 1em;
background: rgb(192,230,230);
}
</style>
</head>
<body bgcolor="white" text="black">
<h1>APLAWS-II: Content Type Schemas</h1>
<p>
<big><strong><em>Final 1 November 2003</em></strong></big>
</p>
<!-- TABLE OF CONTENTS -->
<!-- SECTION Introduction -->
<p>
This document provides XML Schemas for the principle APLAWS
content types. These schemas correspond to the XML generated
for presenting content items for viewing. Other uses of XML
wrt to content types (ie search indexing, import / export) may
use different XML schemas. In addition to the basic content type
attributes, these schemas also describe the XML generated for links,
file attachments and dublin core metadata that are associated with
any content type.
</p>
<p>
The official specification for XML schemas can be found at the
<a href="http://www.w3.org/XML/Schema">W3C</a> site. For a gentler introduction, the O'Reilly
<a href="http://www.oreilly.com/catalog/xmlschema/">XML Schema book</a> is recommended reading.
</p>
<!-- SECTION Content Types -->
<p>
The schemas that follow represent the XML generated by the
<code>com.arsdigita.cms.dispatcher.ContentPanel</code> bebop component.
This is the standard component used on the CMS item.jsp template.
</p>
<!-- SUBSECTION Address -->
<pre class="schema">
<!-- INSERT Address.xsd -->
</pre>
<!-- SUBSECTION Agenda -->
<pre class="schema">
<!-- INSERT Agenda.xsd -->
</pre>
<!-- SUBSECTION Article -->
<pre class="schema">
<!-- INSERT Article.xsd -->
</pre>
<!-- SUBSECTION Event -->
<pre class="schema">
<!-- INSERT Event.xsd -->
</pre>
<!-- SUBSECTION FAQ Item -->
<pre class="schema">
<!-- INSERT FAQItem.xsd -->
</pre>
<!-- SUBSECTION File Storage Item -->
<pre class="schema">
<!-- INSERT FileStorageItem.xsd -->
</pre>
<!-- SUBSECTION Glossary Item -->
<pre class="schema">
<!-- INSERT GlossaryItem.xsd -->
</pre>
<!-- SUBSECTION Job -->
<pre class="schema">
<!-- INSERT Job.xsd -->
</pre>
<!-- SUBSECTION Legal Notice -->
<pre class="schema">
<!-- INSERT LegalNotice.xsd -->
</pre>
<!-- SUBSECTION Minutes -->
<pre class="schema">
<!-- INSERT Minutes.xsd -->
</pre>
<!-- SUBSECTION Multi-part Article -->
<pre class="schema">
<!-- INSERT MultiPartArticle.xsd -->
</pre>
<!-- SUBSUBSECTION Article Section -->
<pre class="schema">
<!-- INSERT ArticleSection.xsd -->
</pre>
<!-- SUBSECTION MOTD Item -->
<pre class="schema">
<!-- INSERT MOTDItem.xsd -->
</pre>
<!-- SUBSECTION News Item -->
<pre class="schema">
<!-- INSERT NewsItem.xsd -->
</pre>
<!-- SUBSECTION Organization -->
<pre class="schema">
<!-- INSERT Organization.xsd -->
</pre>
<!-- SUBSECTION Press Release -->
<pre class="schema">
<!-- INSERT PressRelease.xsd -->
</pre>
<!-- SUBSECTION Service -->
<pre class="schema">
<!-- INSERT Service.xsd -->
</pre>
<!-- FOOTER Daniel Berrange (berrange@redhat.com) -->
</body>
</html>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
DOCNAME=rhea-dpg-aplaws-en

View File

@ -0,0 +1,379 @@
<chapter id="ch-application-development">
<title>Application Development</title>
<para>
Once you have your development server up and running you are ready
to start custom development. The
<command>ccm-devel-create.pl</command> creates a skeleton application
directory for your project where you should place your custom code.
You should have a directory for each custom application you develop in
your dev directory and an entry in
<filename>project.xml</filename>. This chapter will detail the layout
of the application directory and configuration files, however the
details of actually writing XSL, Java, PDL, and JSP are beyond the
scope of this document, please refer to the guides on <ulink url="http://ccm.redhat.com">CCM Website</ulink> or other resources.
</para>
<sect1 id="s1-quick-application-development">
<title>Quick Guide for the Impatient</title>
<para>
<orderedlist>
<listitem><para>Log in as your development user and run the command <command>ccm-profile <replaceable>projectname</replaceable>
</command>.</para>
</listitem>
<listitem>
<para>
<command>cddev</command> to change into the development directory.
</para>
</listitem>
<listitem>
<para>
Make the desired code changes
</para>
</listitem>
<listitem>
<para><command>ant deploy</command> to deploy and test the changes.
</para>
</listitem>
<listitem>
<para>If you are using CVS check in the changes.</para>
</listitem>
</orderedlist>
</para>
</sect1>
<sect1 id="s1-application-directory">
<title>An Application Directory</title>
<para>The dev directory will contain one or more application
directories. Each of these directories will be built as a single
unit, but may depend on functionality provided by other
applications.</para>
<para>An application directory contains several
subdirectories:</para>
<sect2 id="s2-application-directory-structure">
<title>Application Directory Structure</title>
<screen>
<computeroutput>
<userinput>application name</userinput>
|
|
+ -- application.xml
|
|
+ -- etc/
| |
| |
| + -- enterprise.init.in
|
|
+ -- web/
| |
| |
| + -- packages
|
|
+ -- src/
| |
| |
| + -- com/arsdigita/
|
|
+ -- pdl/
|
|
+ -- com/arsdigita/
</computeroutput>
</screen>
</sect2>
<sect2 id="s2-app-etc">
<title>etc/</title>
<para>This holds any custom fragments your package will
need to add to the system initializer file,
<filename>enterprise.init</filename>, in a file called
<filename>enterprise.init.in</filename>. When you are
building your project, one of the steps you will take
will be running a task that concatenates all the
appropriate <filename>enterprise.init.in</filename>
fragments together into one master configuration
file.</para>
<para><filename>etc/</filename> might also contain
custom libraries or other special files your package
relies on.</para>
</sect2>
<sect2 id="s2-app-pdl">
<title>pdl/</title>
<para>This directory contains the PDL files for custom data
objects your application creates and uses. If you
explore the <filename>pdl/</filename> directory, you'll
see it is organized like Java packages, with directories
following a package hierarchy. Like Java, PDL code is
organized in packages (called
<emphasis>models</emphasis>), and PDL objects can extend
other PDL objects.</para>
</sect2>
<sect2 id="s2-app-sql">
<title>sql/</title>
<para>This directory contains the custom SQL files
that create, drop,
and upgrade the database schema for your application,
and a single custom create script
(<filename>oracle-se-create.sql</filename>, for example)
for each database you want your application to run on.
SQL files are organized by package and by the database
they are appropriate for. Note that auto generated sql,
which is what most of your sql will be, only appears in
the build and deployment directories, not in this
<filename>sql/</filename> directory.</para>
</sect2>
<sect2 id="s2-app-src">
<title>src/</title>
<para>holds the Java source code for your package. It is
organized according to the standard Java package directory
hierarchy.</para>
</sect2>
<sect2 id="s2-app-test">
<title>test/</title>
<para>This holds <application>Junit</application> and other
test classes for your application.
<filename>test/</filename> will have at least a
<filename>src/</filename> directory underneath it, and it
may have other directories holding non-Java files necessary
for running your application tests.</para>
</sect2>
<sect2 id="s2-app-web">
<title>web/</title>
<para>This holds files from your application that should be
deployed directly to the servlet container's
<emphasis>webapp root</emphasis> (like the document root
for a web server, the webapp root is the directory where the
servlet container looks for Java classes, and for JSPs and
any static files it needs to serve). Under
<filename>web/</filename> you will find a
<filename>packages/</filename> directory; in a complete
application, you might also see a
<filename>STATIC/</filename> or <filename>assets/</filename>
directory for static files like graphics or CSS.</para>
<para>The <filename>packages/</filename> directory under
<filename>web/</filename> deserves a few special words.
<filename>packages/</filename> is the location for the XSL
for your application, and also for any JSPs you may want to
include. Note that a ccm package is
<emphasis>not</emphasis> the same thing as a Java package; a
&CCM; application can contain many &CCM; packages, which can
contain many Java packages. The distinction is that a &CCM;
package is represented by a row in a &CCM; system table, can
be mounted at site nodes and can have its own dispatcher. A
Java package is simply a unit of code organization, and is
not tracked by &CCM; in any way.</para>
<para>XSL stylesheets for a package go under the
<filename>packages/<replaceable>package-name</replaceable>/xsl/</filename>
directory. Custom JSPs go under the
<filename>packages/<replaceable>package-name</replaceable>/www/</filename>
directory.</para>
</sect2>
</sect1>
<sect1 id="s1-application-dot-xml">
<title>The <filename>application.xml</filename> file</title>
<para><filename>application.xml</filename> provides metadata about
an application, primarily for use when building a package.</para>
<sect2 id="s2-sample-application-dot-xml">
<title>Sample <filename>application.xml</filename> file</title>
<screen><computeroutput>
&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;
&lt;ccm:application name="aplaws-custom"
prettyName="The APLAWS customization and styling package"
version="1.0.0"
release="1"&gt;
&lt;ccm:dependancies&gt;
&lt;!-- &lt;ccm:requires name="core" version="5.0.0"/&gt; --&gt;
&lt;/ccm:dependancies&gt;
&lt;ccm:contacts&gt;
&lt;!--
&lt;ccm:contact uri="http://www.redhat.com/software/ccm" type="website"/&gt;
&lt;ccm:contact uri="mailto:cms@redhat.com" type="support"/&gt;
--&gt;
&lt;/ccm:contacts&gt;
&lt;ccm:description&gt;
The aplaws-custom package customizes the APLAWS system.
&lt;/ccm:description&gt;
&lt;/ccm:application&gt;
</computeroutput>
</screen>
</sect2>
<sect2 id="s2-application-dot-xml">
<title><filename>application.xml</filename> elements</title>
<para>As with <filename>project.xml</filename>, the most commonly
changed parameters are attributes of the top level element,
<command>&lt;ccm:application&gt;</command>:</para>
</sect2>
<sect2 id="s2-ax-name">
<title>name</title>
<para>The machine friendly name of the
application. This is not normally changed once it has
been set.</para>
</sect2>
<sect2 id="s2-ax-pretty-name">
<title>prettyName</title>
<para>The human friendly name of the application.</para>
</sect2>
<sect2 id="s2-ax-version">
<title>version</title>
<para>The version number of the application. This always
consists of 3 numbers, separated by '.', which have
decreasing significance from left to right.</para>
<para>By convention, the first number is the 'very
major' version number. This is normally only changed to
signify a very significant enhancement or change in
functionality. The second number is less major, but
still represents a significant new version. The third
number is the minor version number. You will normally
change this number for bug fixes or minor
enhancements.</para>
<note>
<title>Note</title>
<para>If you specified this application in the
<command>extendsVersion</command> attribute of
<filename>project.xml</filename> then the value you
specify here will be top level version number for
your project.</para>
</note>
</sect2>
<sect2 id="s2-ax-release">
<title>release</title>
<para>The release number specifies a particular build of
a version number.</para>
<para>By convention, you should increase the release
number only if you are correcting something which should
have been in the original release, or something so minor
it could not possibly impact on any other part of the
system, such as a typo. When increasing the version
number, you should reset the release number to 1.</para>
<note>
<title>Note</title>
<para>If you specified this application in the
<command>extendsVersion</command> attribute of
<filename>project.xml</filename> then the value you
specify here will be top level release number for
your project.</para>
</note>
</sect2>
<sect2 id="s2-ax-future">
<title><command>&lt;ccm:dependancies&gt;</command>,
<command>&lt;ccm:contacts&gt;</command>, and
<command>&lt;ccm:description&gt;</command></title>
<para>The <command>&lt;ccm:dependancies&gt;</command>,
<command>&lt;ccm:contacts&gt;</command> and
<command>&lt;ccm:description&gt;</command> elements are placeholders
for future functionality, and are not currently used.</para>
</sect2>
</sect1>
<sect1 id="s1-app-cvs">
<title>Using CVS</title>
<para>
The Concurrent Versions System (CVS) is a powerful file
system-based tool for managing changes made to a code base. It is
particularly useful for tracking changes across time and for
facilitating collaboration of multiple developers on the same
code. This section will provide a brief introduction to CVS and the very basic commands. However it is strongly recommended that you study the CVS manual to take full advantage of this tool.
</para>
<para> CVS works by storing all changes in a central
repository, called the CVS repository. Developers can make copies of
the code from the CVS repository - called a check out - and make
changes to the code. Joe Developer is happy with the changes the the
developer can submit the new changes to the repository (called a check
in). If a Bob Developer comes along and checks out the same code base,
it will now have the changes that Joe made, along with the history of
how Joe changed the code. Because both developers are always referring
to the central CVS repository code changes can be easily shared.
</para>
<para>
CVS can provide you with the following capabilities for your code base:
<itemizedlist>
<listitem><para>Remember what all the previous checked-in
versions of a file contained, using its repository.</para></listitem>
<listitem><para>Show you the difference between what's in your
tree and what's in the repository.</para></listitem>
<listitem><para>Help you merge changes made simultaneously by
multiple authors who might have been unaware of each other's
work.</para></listitem>
<listitem><para>Group a snapshot of currently checked-in
versions of files as a partcular release</para></listitem>
<listitem><para>Revert back to a previous version of the code.</para></listitem>
<listitem><para>Act as a backup and restore facility.</para>
</listitem>
</itemizedlist>
</para>
<sect2 id="s2-cvs-commit">
<title><command>Making changes: cvs commit</command>
</title>
<para>
Once you have made changes to a file you need to notify the repository of your changes. You can do this with the command <command>cvs commit</command>.
</para>
</sect2>
<sect2 id="s2-cvs-update">
<title><command>Retrieving changes: cvs update</command>
</title>
<para>
You can retrieve changes that other developers have made
with the command <command>cvs update</command>. You should always run <command>cvs update</command> before you start working to make sure that the files you are working on are up to date.
</para>
</sect2>
<sect2 id="s2-cvs-help">
<title>CVS Help</title>
<para>
CVS is a very popular software and there is endless online
documentation on how to use it. There is also help available in the manual page for CVS and command line help.
<itemizedlist>
<listitem>
<para>
<ulink url="http://www.cvshome.org/docs/">CVS online documentation.</ulink>
</para>
</listitem>
<listitem><para>man cvs</para></listitem>
<listitem><para><command>cvs --help-options</command>: List of options you can use with CVS.</para></listitem>
<listitem><para><command>cvs --help-commands</command>: List of commands you can use with CVS.</para>
</listitem>
</itemizedlist>
</para>
</sect2>
</sect1>
</chapter>

View File

@ -0,0 +1,468 @@
<chapter id="ch-deploying-to-live">
<title>Building and Deploying A Package</title>
<para>
To install your customized code to the production server you
will need to package the codebase with <firstterm>RPM</firstterm>.
RPM is available for most flavours of UNIX, including
&RHEL; and <trademark>Solaris</trademark>. This section outlines
the steps for building a new RPM and installing it on your production
or staging server.
</para>
<sect1 id="s1-building-package">
<title>Building a package</title>
<para>Deployment to a live server is done by creating a package from a
tested and known good instance and installing it on your live
servers.</para>
<sect2 id="s2-setting-up-instance">
<title>Setting up an Instance</title>
<para>An RPM is built from a staging or development instance. You
will have a dev directory setup which contains all the code you
intend to run on your live server. The first step is to ensure the
quality of the instance you are building from.</para>
<para>First you should do a clean and rebuild of your instance. With
your environment setup for appropriate instance using
<command>ccm-profile</command>, execute the following commands from
the top level dev directory:</para>
<screen>
<command>ccm-stop</command>
<command>ant</command> <option>clean</option>
<command>ant</command> <option>deploy</option>
<command>ccm-start</command>
</screen>
<para>Once this has completed you should test it extensively, but
concentrating specifically on anything you may have changed since
the last build. When you are happy with it, you can create a
package.</para>
</sect2>
<sect2 id="s2-creating-a-package">
<title>Creating a package</title>
<para>Before creating a package, you should first increment the
version or release number as described in <xref
linkend="s2-application-dot-xml">. Be sure to commit your change to CVS
if you are using it.</para>
<para>Creating a package only requires a single command. In the top
level dev directory there will be a file called
<filename>rollingbuild.sh</filename>. To execute it, type:</para>
<screen>
<command>./rollingbuild.sh</command>
</screen>
<para><command>rollingbuild.sh</command> does a complete build from
scratch and can potentially take a long time to run. By default it
also builds more than one type of package. To make it run quicker,
you can use the following command instead:</para>
<screen>
<command>CCM_DIST_NOZIPS=1 ./rollingbuild.sh</command>
</screen>
</sect2>
<sect2>
<title>RPM version</title>
<para>
You will want to increment the release and version numbers of your
packages everytime you create a new build. You can do this
by editing <filename>project.xml</filename> or
<filename>application.xml</filename>. Please see <xref linkend="s2-ax-release"/>.
</para>
<caution>
<para>
If you do not increment the release number you will not
be able to upgrade an existing installation without using the
<command>rpm --force</command> option. You should
<emphasis>always</emphasis> increment the release number no matter how
insignificant the change is. Having good accounting in terms of
releases allows you to revert to older versions.
</para>
</caution>
</sect2>
<sect2 id="s2-file-locations">
<title>File locations</title>
<para><command>rollingbuild.sh</command> creates a number of rpms
which are arranged according to convention. All of the rpms are
created in the directory
<filename>/var/ccm-devel/rpm/<replaceable>username</replaceable>/RPMS/noarch</filename>. The source RPM is in <filename>/var/ccm-devel/rpm/<replaceable>username</replaceable>/SRPMS/</filename></para>
<para>When it finishes, rollingbuild will have created a number of
packages.
<itemizedlist>
<listitem><para>
<filename><replaceable>projectname</replaceable>-x.x.x-x.noarch.rpm</filename> - This is the binary RPM of the code base.
</para></listitem>
<listitem><para>
<filename><replaceable>projectname</replaceable>-servlet-resin-x.x.x-x.noarch.rpm</filename> - This is the RPM for running your project with the Resin servlet container.
</para></listitem>
<listitem><para>
<filename><replaceable>projectname</replaceable>-servlet-tomcat3-x.x.x-x.noarch.rpm</filename> - This is the RPM for running your project with the Tomcat servlet container.
</para></listitem>
<listitem><para>
<filename><replaceable>projectname</replaceable>-devel-tomcat3-x.x.x-x.noarch.rpm</filename> - This is the RPM for creating another project that extends the current project. This will install code in <filename>/usr/share/ccm-devel/project</filename>.
</para></listitem>
<listitem><para>
<filename><replaceable>projectname</replaceable>-doc-x.x.x-x.noarch.rpm</filename> - This is the javadoc generated from your project code. It will include all the APLAWS and &CCM; Javadoc.
</para></listitem>
<listitem><para>
<filename><replaceable>projectname</replaceable>-x.x.x-x.src.noarch.rpm</filename> - This is the source RPM for your project.
</para></listitem>
</itemizedlist>
</para>
</sect2>
</sect1>
<sect1 id="s1-install-project">
<title>Installing your RPM</title>
<para>
Once you have created your RPM you will need to install
it on your staging or production machine. Here are the steps for
installing your RPMS, you will need to be logged in as the root user.</para>
<sect2 id="s2-install-quick">
<title>Quick steps for the impatient</title>
<orderedlist>
<listitem><para>Copy two RPMs,
<filename><replaceable>projectname</replaceable>-x.x.x-x.noarch.rpm</filename>,
and
<filename><replaceable>projectname</replaceable>-servlet-resin-x.x.x-x.noarch.rpm</filename>
to your staging server.
</para></listitem>
<listitem><para>
Install the two RPMs at once by running the following command.
<screen>
<command>rpm -Uvh <replaceable>projectname-x.x.x-x.noarch.rpm projectname</replaceable>-servlet-resin-x.x.x-x.noarch.rpm</command>
</screen>
</para></listitem>
<listitem><para>
Copy the file <filename>/etc/<replaceable>projectname</replaceable>.cfg-resin</filename> to <filename>/etc/<replaceable>projectname</replaceable>.cfg</filename>.
</para></listitem>
<listitem><para>
Edit <filename>/etc/<replaceable>projectname</replaceable>.cfg</filename> in the same way you edited <filename>config.vars</filename>.
</para></listitem>
<listitem><para>
Update the configuration files for your server by running <command><replaceable>projectname</replaceable>-configure.pl</command>. This is similar to running <command>ant make-init</command>.
<screen>
/usr/sbin/<replaceable>projectname</replaceable>-configure.pl /etc/<replaceable>projectname</replaceable>.cfg
</screen>
</para></listitem>
<listitem><para>
The server should restart automatically when the configuration files are changed. If this does not happen you can restart the server manually with the init script.
<screen>
/etc/init.d/<replaceable>projectname</replaceable> restart # stop|start
</screen>
</para></listitem>
</orderedlist>
</sect2>
<sect2 id="s2-install-rpm-project">
<title>Installing the RPMS: <filename><replaceable>projectname</replaceable>-x.x.x-x.noarch.rpm</filename></title>
<para>
You will need to install the two RPMs
<filename><replaceable>projectname</replaceable>-x.x.x-x.noarch.rpm</filename>,
and
<filename><replaceable>projectname</replaceable>-servlet-resin-x.x.x-x.noarch.rpm</filename>
together as the two are
interdependent. <filename><replaceable>projectname</replaceable>-x.x.x-x.noarch.rpm</filename>
will install your code in
<filename>/var/www/<replaceable>projectname</replaceable></filename>
where it will be used by your application server. This RPM also
installs the init file
<filename>/etc/init.d/<replaceable>projectname</replaceable></filename>,
the configuration script
<filename>/usr/sbin/<replaceable>projectname</replaceable>-configure.pl</filename>,
and the log directory
<filename>/var/log/<replaceable>projectname</replaceable>.</filename>
</para>
</sect2>
<sect2 id="s2-install-rpm-servlet">
<title>Installing the RPMS: <filename><replaceable>projectname</replaceable>-servlet-resin-x.x.x-x.noarch.rpm</filename></title>
<para>
The servlet RPM will install configuration files and
wrapper scripts for controlling the servlet container. Specifically it will install the following files:
<itemizedlist>
<listitem><para><filename>/usr/share/<replaceable>projectname</replaceable>/bin/resin/run-apache.sh.in</filename></para></listitem>
<listitem><para><filename>/usr/share/<replaceable>projectname</replaceable>/bin/resin/run-resin.sh.in</filename></para></listitem>
<listitem><para><filename>/usr/share/<replaceable>projectname</replaceable>/bin/resin/run.sh.in</filename></para></listitem>
<listitem><para><filename>/usr/share/<replaceable>projectname</replaceable>/conf/resin</filename></para></listitem>
<listitem><para><filename>/usr/share/<replaceable>projectname</replaceable>/conf/resin/httpd-resin-vhost.conf.in</filename></para></listitem>
<listitem><para><filename>/usr/share/<replaceable>projectname</replaceable>/conf/resin/resin-back.conf.in</filename></para></listitem>
<listitem><para><filename>/usr/share/<replaceable>projectname</replaceable>/conf/resin/resin-front.conf.in</filename></para></listitem>
</itemizedlist>
</para>
<para>
These files are templates for your installation. When
you run the command
<command>/usr/sbin/<replaceable>projectname</replaceable>-configure.pl</command>
copies of these files will be placed in
<filename>/var/www/<replaceable>projectname</replaceable>/conf</filename>
and
<filename>/var/www/<replaceable>projectname</replaceable>/bin</filename>. They
will also be edited to reflect the parameters you set in
<filename>/etc/<replaceable>projectname</replaceable>.cfg</filename>
</para>
</sect2>
<sect2 id="s2-project-dot-cfg">
<title>The <filename><replaceable>projectname</replaceable>.cfg</filename></title>
<para>
Once the RPMs are installed you will need to edit the
configuration file for your server. The template for the config file
is
<filename>/etc/<replaceable>projectname</replaceable>.cfg-resin</filename>. Copy
this file to
<filename>/etc/<replaceable>projectname</replaceable>.cfg</filename>
and edit the parameters much like how you edited
<filename>config.vars</filename>. Some of the parameters are not in
<filename>config.vars</filename> and you will need to change the
values depending on how your Resin and HTTP servers are set up. Below
is an example of a configuration file for a production installation
with two Resin application servers and one Apache front end. The
values you need to change in addition to what what you find in
<filename>config.vars</filename> is emphasised with additional
comments. The Resin servers are called resin1.example.com and
resin2.example.com and the Apache server is called apache.example.com.
</para>
<note>
<title><command>hostname</command></title>
<para>The hostnames for the servers need to be exactly
as they appear when you run the <command>hostname</command>
command. If you want to change the default behavior of
<command>hostname</command> to return the short name or the fully
qualified domain name here is what you can do:
</para>
<para>
Edit <filename>/etc/sysconfig/network</filename> and change HOSTNAME
to be the fully qualified domain name. You can also use the gui tools
<command>netconfig</command> and
<command>redhat-config-network</command> to do this. These changes
will only take effect after the machine has been restarted. To change
it at runtime pass an argument to <command>hostname</command> as root.
<screen>
$ hostname resin1.example.com
</screen>
You can test this by running <command>hostname</command> with no
arguments. </para>
</note>
<screen><computeroutput>
##########################################
# APLAWS Master configuration file #
#########################################
servlet-container = resin
## This is set to servlet23 by default but should be resin
<userinput>servlet-webxml = resin</userinput>
# NB: all hostnames used should be
# the fully qualified name as returned
# by the 'hostname' command with no arguments.
####################################
# UNIX system level configuration
# Installation directory for resin
## This should be the directory of your Resin installation
<userinput>resin-home = /opt/resin/2.1.8</userinput>
# Installation directory for this app
app-home = /var/www/aplaws
# Directory containing the base runtime & config files
runtime-home = /usr/share/aplaws
# UNIX accounts to run as
user = servlet
group = servlet
# Whereever you installed JDK 1.3.1
# java-home = /usr/j2se
# java-home = /usr/java/jdk1.3.1
## The java-home should point to $JAVA_HOME
<userinput>java-home = /opt/IBMJava2-131</userinput>
# Userinputly tell java to use more memory
#
# For Sun's JDK, on a machine with 1GB
#jre-args = -J-client -J-Xss128k -J-Xms512m -J-Xmx512m -J-XX:NewSize=128m -J-XX:MaxNewSize=128m
#
# For IBM's JDK on a machine with 256MB
#jre-args = -J-Xms128m -J-Xmx128m
<userinput>jre-args = -J-Xms1536m -J-Xmx1536m</userinput>
# The hostname of the front end apache box
<userinput>apache = apache.example.com</userinput>
# The hostnames of the back end resin boxes
<userinput>resin = resin1.example.com</userinput>
<userinput>resin = resin2.example.com</userinput>
# The SRUN ports for apache to talk to the resin
# boxes. The 'hostname:port' pair designates which
# srun port each resin instance listens on.
# If there is a firewall, between the resin and
# apache boxes, a second 'hostname:port' pair
# specifies the host and port of the firewall
#
# eg1. no firewall
<userinput>srun = resin1.example.com:6802</userinput>
<userinput>srun = resin2.example.com:6802</userinput>
# eg2. with firewall
<userinput>#srun = resin1.example.com:6082, firewall:6802</userinput>
<userinput>#srun = resin2.example.com:6082, firewall:6803</userinput>
# Turn on http listening on either apache
# or resin boxes. Only need http port on
# the resin boxes for debugging purposes
<userinput>http = apache.example.com:80</userinput>
# Only for debugging
<userinput>http = resin1.example.com:8080</userinput>
<userinput>http = resin2.example.com:8080</userinput>
# ACS initialization file
admin-answer = 6
admin-email = admin@example.com
admin-forename = Administrator
admin-password = 123456
admin-question = 12345
admin-surname = Account
cache-expiry = 900
<userinput>cache-peers = "http://resin1.example.com:8080"</userinput>
caching-active = yes
db-pass = aplaws_xyz
db-pool = 150
db-user = aplaws
debug-mode = false
default-locale = en_US
default-scheme = http
developer-support = false
dispatcher-context-path =
dispatcher-servlet-path =
dmi-active = false
dmi-data-model-file = "/WEB-INF/sql/ccm-core/default/dmi/dmi-create.sql"
dmi-xml-files = { "core-dmi.xml", "/WEB-INF/sql/ccm-core" }
<userinput>host-name = apache.example.com</userinput>
<userinput>hostname = apache.example.com</userinput>
jdbc-url = jdbc:postgresql://postgres.example.com/aplaws
log-dir = /var/log/aplaws
log-level = warn
log-size = 1000000
login-stylesheet = login_en.xsl
lucene-index-location = /var/www/aplaws/lib/lucene-index
permissionsDMLChecking = false
search-intermedia-enabled = false
search-lucene-enabled = true
search-lucene-indexer-id = 2
<userinput>server-name = apache.example.com</userinput>
server-port = 80
sitename = APLAWS
smtp-host = localhost
state-dir = /var/www/aplaws/lib
subsite-dispatcher-class = com.arsdigita.ui.login.SubsiteDispatcher
xslt-engine = Saxon
xslt-timeout = 60000
# WCT CMS Initialization File
content-digest-sender = article-digest@example.com
forms-content-digest-sender = forms-digest@foo.com
inso_filter_works = 0
<userinput>publish-to-fs-servers = "http://resin1.example.com/", "http://resin2.example.com/"</userinput>
<userinput>publish-to-fs-source = "http://resin2.example.com/"</userinput>
<userinput>publish-to-fs-this-server = "http://resin2.example.com/"</userinput>
search-engine = lucene
# Version: $Id: building-packages.sgml 287 2005-02-22 00:29:02Z sskracic $ $Date: 2004/07/29 $
adminCanEditPosts = true
authorCanEditPosts = true
digestUserEmail = digests
<userinput>replyHostName = apache.example.com</userinput>
# Navigation initialization file
default-content-section-url = "/content/"
# System Properties
project-name = aplaws
</computeroutput>
</screen>
</sect2>
<sect2 id="s2-aplaws-configure-dot-pl">
<title><command>/usr/sbin/<replaceable>projectname</replaceable>-configure.pl</command></title>
<para>
Once you have edited
<filename>/etc/<replaceable>projectname</replaceable>.cfg-resin</filename>
you can run
<command>/usr/sbin/<replaceable>projectname</replaceable>-configure.pl</command>
to generate the config files and the run scripts for your server to
use. Make sure that you do not get errors after you run this
command. <command>/usr/sbin/<replaceable>projectname</replaceable>-configure.pl</command>
copies files from
<filename>/usr/share/<replaceable>projectname</replaceable>/bin/resin/</filename>
and replaces the parameter values with what you have set in the
configuration file and places them in
<filename>/var/www/<replaceable>projectname</replaceable>/conf</filename>. It
also generates the wrapper run scripts in
<filename>/var/www/<replaceable>projectname</replaceable>/bin</filename>.
</para>
</sect2>
<sect2 id="s2-etc-init-dot-d">
<title><command>/etc/init.d/<replaceable>projectname</replaceable></command></title>
<para>
Once the configuration files and the wrapper scripts are written
you can start, stop, and restart your sever using
<command>/etc/init.d/<replaceable>projectname</replaceable></command>.
The log files are located in your specified directory, by default
<filename>/var/log/<replaceable>projectname</replaceable></filename>. You
should <command>tail -f
/var/log/<replaceable>projectname</replaceable>/*.log</command> to
monitor the progress of your server startup.
</para>
<note>
<title><command>/etc/init.d/<replaceable>projectname</replaceable></command> restart </title>
<para>
When you restart the server the command will pause for a number
of seconds to wait for the application server to completely exit.
</para>
</note>
</sect2>
</sect1>
</chapter>

View File

@ -0,0 +1,259 @@
<chapter id="ch-create-new-project">
<title>Creating a New Project</title>
<para>This section addresses using the APLAWS build tools to create a new
project, or instance of your project. This may be for development or for
use as a staging server. </para>
<note><title>Note:</title>
<para>This section assumes that you have all the necessary tools
installed for a working development area. The steps for setting up a
development environment is beyond the scope of this document. Please
consult the installation guide for details.</para></note>
<sect1 id="s1-quick-steps-setup">
<title>Quick Guide for the Impatient</title>
<orderedlist>
<listitem>
<para>As the root user, create a system login for the
development user (<xref linkend="s1-setup-users"/>).</para>
</listitem>
<listitem>
<para>As the root user, set up the new development user as for
the development
environment with the command <command>ccm-devel-user.sh</command> <replaceable>username</replaceable> (<xref linkend="s2-setup-devel-user"/>)</para>
</listitem>
<listitem>
<para>As the development user, start a new APLAWS project with
the command <command>ccm-devel-create.pl</command> <option>--extends
aplaws aplaws_</option><replaceable>xxx</replaceable> (<xref
linkend="s1-create-project"/>)</para>
</listitem>
<listitem>
<para>
Familiarize yourself with the web directory, the dev
directory, and CVS (<xref linkend="s2-project-directory"/>, <xref
linkend="s2-web-directory"/>, <xref
linkend="s2-shared-source-directory"/>, and <xref
linkend="s2-create-project-cvs"/>).
</para>
</listitem>
</orderedlist>
</sect1>
<sect1 id="s1-setup-users">
<title>Setting up Users</title>
<para>This section should be carried out by the system
administrator. The first step is to create accounts for all users who
will be
developing with APLAWS. This has two steps:</para>
<orderedlist>
<listitem>
<para>Create a system login</para>
</listitem>
<listitem>
<para>Create a &CCM; development area</para>
</listitem>
</orderedlist>
<note>
<title>Note</title>
<para>A user only has to be setup once. Once their system account
and &CCM; development environment have been created, they can create
any number of projects without having to go through this process
again.</para>
</note>
<sect2 id="s2-create-system-login">
<title>Creating a system login</title>
<para>The following commands will create a new user,
set the password for that user and add the user to the
<command>ccm-devel</command> group.</para>
<screen>
<command>useradd</command> <option>-m</option> <replaceable>username</replaceable>
<command>passwd</command> <replaceable>username</replaceable>
<command>gpasswd</command> <option>-a</option> <replaceable>username</replaceable> <option>ccm-devel</option>
</screen>
<note>
<title>Note</title>
<para>These commands are for &RHELAS;. These will be slightly
different on other systems, but the effect must be the
same.</para>
</note>
</sect2>
<sect2 id="s2-setup-devel-user">
<title>Set Up the Development User with the Development Environment</title>
<para>Once a user is created, you need to configure the &CCM; development
area for them. This is done with the
<command>ccm-devel-user.sh</command> command, which must be executed
as <command>root</command>.</para>
<screen>
<command>ccm-devel-user.sh</command> <replaceable>username</replaceable>
</screen>
</sect2>
</sect1>
<sect1 id="s1-create-project">
<title>Starting a new APLAWS project</title>
<para>Login as the development user that was just created for you. To
start a new project, based on APLAWS we use the
<option>--extends</option>. For the project name a good naming scheme
would be to concatenate the word aplaws_ with your organization name, e.g.
<command>aplaws_herefordshire</command>. Putting those two bits together, we
get:</para>
<screen>
<prompt>bash-2.05b$</prompt> <command>ccm-devel-create.pl</command> <option>--extends aplaws aplaws_</option><replaceable>xxx</replaceable>
<computeroutput>
Installation complete; your server will run on port 9005.
</computeroutput>
</screen>
<para>You should make a note of this port number. When you have your
instance running, you will access it at the URL
http://<replaceable>your-server</replaceable>:<replaceable>port</replaceable>/.
<note><title>Note:</title>
<para>The port number of your development server can also be
found in the configuration file for your servlet container. This is
located in
<filename>/var/ccm-devel/web/<replaceable>username</replaceable>/<replaceable>projectname</replaceable>/conf.</filename>
</para>
</note>
<note>
<title>Troubleshooting</title>
<para>
If you make a mistake running this command, you can undo the
effects by removing the web and dev directories it created. You
will need to <command>rm -rf </command> the following directories:
<itemizedlist> <listitem>
<para>
<filename>/var/ccm-devel/dev/<replaceable><optional>username</optional></replaceable>
/<replaceable>projectname</replaceable>
</filename>
</para>
</listitem>
<listitem>
<para><filename>/var/ccm-devel/web/<replaceable>username</replaceable>/<replaceable>projectname</replaceable></filename></para>
</listitem>
</itemizedlist>
</para>
</note>
</para>
<para>
The <command>ccm-devel-create.pl</command> command creates two
directories for your use. The <emphasis>project web</emphasis> directory and
the <emphasis>project dev</emphasis> directory. From this point on, the project dev directory will be refered to as the <emphasis>dev directory</emphasis>.
It is important that you do
not confuse the two directories,the web directory is for your web
server and should not be modified directly. The
<emphasis>project</emphasis> on the other hand is your dedicated working
area. Since your project will be based on APLAWS also important to
note the function of the <emphasis>shared source</emphasis> directory
where the APLAWS code lives.
</para>
<sect2 id="s2-project-directory">
<title>Dev Directory</title>
<para>The dev directory is located at
<filename>/var/ccm-devel/dev/<replaceable>username</replaceable>/<replaceable>projectname</replaceable></filename>. This
is the directory that will contain all your custom code. When you use
ant to deploy your code, the Java, jsp, and XSL in this directory will
be compiled and placed in the appropriate locations in the web
directory. The contents of this directory is discussed in more detail in the <xref linkend="s1-project-directory"/> section.</para>
</sect2>
<sect2 id="s2-web-directory">
<title>Web Directory</title>
<para> The web directory is located at
<filename>/var/ccm-devel/web/<replaceable>username</replaceable>/<replaceable>projectname</replaceable></filename>. This
area is dedicated to your application server. All content in this
directory except for the <filename>conf</filename> subdirectory,
should be reproducible from the contents of the dev directory and the
shared source directories. You should <emphasis>never</emphasis> make
changes directly in this directory. </para>
</sect2>
<sect2 id="s2-shared-source-directory">
<title>Shared Source Directory</title>
<para>
The shared source directory is at
<filename>/usr/share/ccm-devel/projects/<replaceable>aplaws-xxx</replaceable></filename>. This
is where the APLAWS code base lives, the files here should not be
modified, and only used as a reference. The code in this directory and
the code in the <emphasis>project</emphasis> directory is complied and
placed in the <emphasis>web directory</emphasis> for use by the web server.
</para> </sect2>
<sect2 id="s2-create-project-cvs">
<title>CVS</title>
<para>If you installed the <command>ccm-devel-cvs</command> package,
the system will automatically perform some CVS tasks for you.
Namely:</para>
<itemizedlist>
<listitem>
<para>Create a new CVS module</para>
</listitem>
<listitem>
<para>Check out an existing CVS module</para>
</listitem>
</itemizedlist>
<para>When you create a new project the system will check to see if
there is already a CVS module by the same name. For example, of you
created a project called <command>aplaws_camden</command>, it will
look for a CVS module called
<command>aplaws_camden</command>.</para>
<para>Depending on whether or not the CVS module already exists, it
will create or use it as appropriate.</para>
<note>
<title>Note</title>
<para>This is the only way in which CVS is directly used by the
build tools. If have a good understanding of CVS and
have more complicated requirements, it is quite safe to change
the default setup after it has been created.</para>
</note>
<para>
For further reference on CVS please refer to the <ulink
url="http://www.cvshome.org">CVS manual</ulink>.
</para>
</sect2>
</sect1>
</chapter>

View File

@ -0,0 +1,925 @@
<chapter id="ch-development-environment">
<title>The Development Environment</title>
<sect1 id="s1-starting-development">
<title>Starting development</title>
<para>Once you have your project setup, you should use the
commands from the &CCM; build tools to set up your environment variables
and begin development. You should always login as
your development user or <command>su -
<replaceable>developmentuser</replaceable></command>,
<command>ccm-profile <replaceable>projectname</replaceable></command>,
and <command>cddev</command>. Please see <xref
linkend="s2-ccm-profile"> , and <xref linkend="s2-cddev">.
</para> </sect1>
<sect1 id="s1-quick-steps-development">
<title>Quick Development Guide for the impatient</title>
<para> Here is a outline of the steps for starting development the
first time. Each step has a reference link to the detailed
documentation in the later section. While this will get you started,
not all the commands are referenced from this section, you should read
through the whole document to familiarize yourself with the command
set and take full advantage of the build environment.
<orderedlist>
<listitem>
<para>Log in as the development user</para>
</listitem>
</orderedlist>
<orderedlist>
<listitem>
<para>Set up your shell environment variables with the command
<command>ccm-profile <optional>project_name</optional></command>
(<xref linkend="s2-ccm-profile"/>).
</para>
</listitem>
</orderedlist>
<orderedlist>
<listitem>
<para><command>cddev</command> to get to the dev directory
(<xref linkend="s2-cddev"/>).</para>
</listitem>
</orderedlist>
<orderedlist>
<listitem>
<para>Edit <filename>ant.properties</filename> and
<filename>project.xml</filename> (<xref linkend="s2-ant-dot-properties"/>
<xref linkend="s1-project-xml">.</para>
</listitem>
</orderedlist>
<orderedlist>
<listitem>
<para>Generate <filename>config.vars</filename> with the command
<command>ant make-config</command>
(<xref linkend="s1-config-dot-vars"/>,
</para>
</listitem>
</orderedlist>
<orderedlist>
<listitem>
<para>Create server readable configuration file
<filename>enterprise.init</filename> with the command <command>ant
make-init</command> (<xref linkend="s2-ant-make-init"/>).
</para>
</listitem>
<listitem>
<para>
Deploy the code with <command>ant deploy</command> (<xref
linkend="s2-ant-deploy"/>).
</para>
</listitem>
<listitem>
<para>
Load the datamodel by going into the web directory and running
the apropreate create script (<xref linkend="s1-dev-database"/>).
</para>
</listitem>
<listitem>
<para>
Start the server with <command>ccm-start</command>, follow the progress with <command>tailllogs</command>
(<xref linkend="s2-ccm-start"/>, <xref linkend="s2-taillogs"/>).
</para>
</listitem>
</orderedlist>
</para>
</sect1>
<sect1 id="s1-useful-commands">
<title>Useful Commands</title>
<sect2 id="s2-ccm-profile">
<title>ccm-profile</title>
<screen><command>ccm-profile <optional>project_name</optional></command></screen>
<para>This command sets up the environment
variables in your shell. It also makes all
other commands available, and customizes them to work with
a particular project.</para>
<note>
<title>Note</title>
<para>Because <command>ccm-profile</command> creates all
the other build tool commands, it must be run first.
Failing to run <command>ccm-profile</command> will most
likely result in the error <computeroutput>command not
found</computeroutput> when trying to execute any other
build tool command.</para>
</note>
</sect2>
<sect2 id="s2-cddev">
<title>cddev</title>
<para>Change directory to the current project's development
directory. See the section on <xref linkend="s1-project-directory"> for an explanation of its contents.</para>
</sect2>
<sect2 id="s2-cdweb">
<title>cdweb</title>
<para>Change directory to the current project's web
directory. This contains the logs, configuration files and
the deployed web application. Changes are not normally made
directly in this directory or any of its sub-directories.
Rather changes are made automatically by the build
tools.</para>
<warning>
<title>Warning</title>
<para>Making changes directly in the web directory can
cause unpredictable results.</para>
</warning>
</sect2>
<sect2 id="s2-taillogs">
<title>taillogs</title>
<para>The APLAWS server will generate a variety of logs
while it is running. The location of the log files are determined by
the configuration parameter in <filename>config.vars</filename> called
<command>log-dir</command>. Usually this is set to a subdirectory
called <filename>logs</filename> in the dev directory (
<xref linkend="s2-web-directory">). The <command>taillogs</command>
displays new entries in all log files immediately as they are added. To quit, type
<keycombo><keycap>Ctrl</keycap><keycap>C</keycap></keycombo>. The log files displayed are located at <filename>/var/ccm-devel/web/<replaceable>username</replaceable>/<replaceable>projectname</replaceable>/logs/</filename>.
</para>
<note>
<title>Note</title>
<para>When they grow above a certain size (by default
1MB), log files are rolled, which means the log file is
renamed and a new one is created for new entries. If
this happens to a file while you are viewing it, you
will stop seeing updates. If you suspect this has
happened, stop <command>taillogs</command> and restart
it.</para>
</note>
</sect2>
<sect2 id="s2-tailccm">
<title>tailccm</title>
<para>The same as <command>taillogs</command>, except just
for <filename>/var/ccm-devel/web/<replaceable>username</replaceable>/<replaceable>projectname</replaceable>/logs/ccm.log</filename>.</para>
</sect2>
<sect2 id="s2-ccm-start">
<title>ccm-start</title>
<para>Start your instance running. After running this
command you should run <command>tailccm</command> or
<command>taillogs</command> which will show you when the
initialization process has completed.</para>
<para>It is also possible to pass arguments to
<command>ccm-start</command>, which will be passed directly
to the servlet container. For example:</para>
<screen>
<command>ccm-start</command> <option>-Djava.compiler=none</option>
</screen>
<para>This particular example will start the instance with
the JIT compiler switched off.</para>
</sect2>
<sect2 id="s2-ccm-stop">
<title>ccm-stop</title>
<para>Stop the instance.</para>
<warning>
<title>Warning</title>
<para>The <command>ccm-stop</command> command only
signals the servlet container to stop. Depending on
what the instance is doing, it can take a short while
for all processes to actually shut down. You should
take care that all java processes have stopped before
trying to start a new instance, as this can cause
unpredictable results.</para>
</warning>
</sect2>
<sect2 id="s2-ccm-configure.sh">
<title>ccm-configure.sh</title>
<para> If you want to work off of a different
version of APLAWS or want to add a new application you will need to
change your <filename>project.xml</filename>(<xref linkend="s2-project-dot-xml">). You will need to
reconfigure the project area by running
<command>ccm-configure.sh</command>. This command creates or updates
the
<filename>build.xml</filename> file in the
<emphasis>project</emphasis> directory from the information
contained in <filename>project.xml</filename>. It should be
executed every time a change is made to
<filename>project.xml</filename>. </para>
<para>Unlike other commands, you must be in the same
directory as <filename>project.xml</filename> when executing
<command>ccm-configure.sh</command>.</para>
</sect2>
</sect1>
<sect1 id="s1-project-directory">
<title>The Dev Directory</title>
<para>The dev directory is the top level development directory, it is located in <filename>/var/ccm-devel/dev/<replaceable>username</replaceable>/<replaceable>projectname</replaceable></filename>. It
contains information for the build process and all the source code in
subdirectories. The dev directory contains a variety of configuration files for customizing ant, the servlet container, and APLAWS for your project. </para>
<sect2 id="s2-directory-structure">
<title>The Dev Directory Structure</title>
<screen>
/var/ccm-devel/dev/<replaceable>username</replaceable>/<replaceable>projectname</replaceable>
|
|
+--+ project.xml
|
|
+--+ ant.properties
|
|
+--+ config.vars
|
|
+--+ enterprise.init
|
|
+--+ <replaceable>application directory</replaceable>
</screen>
</sect2>
<sect2 id="s2-project-dot-xml">
<title>project.xml</title>
<para>Contains a description of the project and its
components. This file is used to generate build.xml, and
to contains all the metadata required for creating a
project package. It is described fully in the
<xref linkend="s1-project-xml">.</para>
</sect2>
<sect2 id="s2-ant-dot-properties">
<title>ant.properties</title>
<para>This contains information required by
<application>ant</application>, which is used for building
&CCM; projects. The only option which may require alteration
in this file is <command>ccm.servlet.engine</command>. For
APLAWS projects, this should be set to
<option>resin</option>.</para>
</sect2>
<sect2 id="s2-build-dot-xml">
<title>build.xml</title>
<para>This file is used directly by
<application>ant</application>, and should never be edited
directly. It is created automatically by the
<command>ccm-configure.sh</command> command from the
information contained in
<filename>project.xml</filename>.</para>
</sect2>
<sect2 id="s2-config-dot-vars">
<title><filename>config.vars</filename></title>
<para>
This file stores the configuration parameters for your
development server. You will need to generate and edit this file to
before you can get your server running. It is explained in more detail in the <xref linkend="s1-config-dot-vars">.
</para>
</sect2>
<sect2 id="s2-enterprise-dot-init">
<title><filename>enterprise.init</filename></title>
<para>This file is generated from <filename>config.vars</filename> and <filename>enterprise.init.in</filename> files in the application directories. This is the file that the server reads at startup. It is explained in more detail in the <xref linkend="s1-config-dot-vars">.
</para>
</sect2>
</sect1>
<sect1 id="s1-project-xml">
<title>The <filename>project.xml</filename> file</title>
<para>This file describes the project and its components for the
development and package building tools.</para>
<para>Below is a sample <filename>project.xml</filename>
file.</para>
<screen>
<computeroutput>
&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;
&lt;ccm:project name="aplaws_<userinput>borough</userinput>"
prettyName="APLAWS - <userinput>Borough</userinput>"
type="project"
<userinput>versionFrom="aplaws_<userinput>borough</userinput>"</userinput>
extends="aplaws"
extendsVersion="1.2.15"
<userinput>version="0.8.3"</userinput>
<userinput>release="1"</userinput>
xmlns:ccm="http://ccm.redhat.com/ccm-project"&gt;
&lt;!-- List all project specific applications here --&gt;
&lt;ccm:build&gt;
&lt;ccm:application name="aplaws_<userinput>borough</userinput>" prettyName="aplaws_<userinput>borough</userinput>" buildOrder="1"/&gt;
&lt;/ccm:build&gt;
&lt;!-- List all shared, pre-built applications here --&gt;
&lt;ccm:prebuilt&gt;
&lt;!--&lt;ccm:application name="cms" version="5.0.0" buildOrder="1"/&gt; --&gt;
&lt;/ccm:prebuilt&gt;
&lt;/ccm:project&gt;
</computeroutput>
</screen>
<para>The attributes of the <command>&lt;ccm:project&gt;</command>
tag define the highest level information about the project:</para>
<sect2 id="s2-px-name">
<title>name</title>
<para>The machine friendly name of the project. This is
the name of the package when you create one, the name of
a number of directories created when installing the
package, and the name of the System V service the
package creates.</para>
<para>You will not typically change the value of this
attribute once it has been set.</para>
</sect2>
<sect2 id="s2-px-prettyname">
<title>prettyName</title>
<para>This is a more descriptive name for the project
for use when making a package.</para>
</sect2>
<sect2 id="s2-px-type">
<title>type</title>
<para>This attribute should always have the value
<option>project</option> for APLAWS based
projects.</para>
</sect2>
<sect2 id="s2-px-version-from">
<title>versionFrom</title>
<para>This is the name of an application subdirectory
which contains a file called
<filename>application.xml</filename>. If the
<command>versionFrom</command> attribute is used, the
version number for the package is taken from that file,
instead of <filename>project.xml</filename>. The format
of this file is explained in the
<xref linkend="s2-application-dot-xml">.</para>
<para>For APLAWS this will typically be your "-custom"
directory containing custom styling.</para>
</sect2>
<sect2 id="s2-px-version">
<title>version</title>
<para>This is the version number of the project. The
version number is used when an RPM is built from the development
environment. If the <emphasis>versionFrom</emphasis> attribute exists
it will be ignored and the version numbers in the
<filename>application.xml</filename> will be
used. Please see <xref linkend="s2-ax-version">.</para>
</sect2>
<sect2 id="s2-px-release">
<title>release</title>
<para>This is the release number of the project. The
version number is used when an RPM is built from the development
environment. If the <emphasis>versionFrom</emphasis> attribute exists
it will be ignored and the release number in the
<filename>application.xml</filename> will be used. Please see <xref linkend="s2-ax-release"> </para>
</sect2>
<sect2 id="s2-px-extends">
<title>extends</title>
<para>This is the name of the project you are
extending. In order for this to work, you will have to
have installed the development package for that project.
For example, for aplaws you will have installed a
package called
<filename>aplaws-devel-1.2.<replaceable>xx</replaceable>-<replaceable>y</replaceable></filename>.
</para>
<para>You will not typically change the value of this
attribute once it has been set.</para>
</sect2>
<sect2 id="s2-px-extends-version">
<title>extendsVersion</title>
<para>This is the version of the <emphasis>project which
you are extending</emphasis>. For example, if you
installed <filename>aplaws-devel-1.2.15-3</filename>,
extendsVersion would be set to <option>1.2.15</option>.
Note that the release number ("-3") is omitted.</para>
<para>You will update this value every time you install
a new version of the aplaws-devel package.</para>
</sect2>
<sect2 id="s2-px-ccm-build">
<title>&lt;ccm:build&gt;</title>
<para>In addition to the above attributes, there are 2 sections
where the structure of the application is defined.</para>
<para>This section contains a list of applications which
will be compiled and included in this project. For every
application listed here, there must be an application
subdirectory with the same name in the project
directory.</para>
<para>The <command>buildOrder</command> attribute is
used to define which order the applications should be
built in. If an application uses components provided by
another application you will have to make sure they are
built in the correct order.</para>
<para>Another option not shown in the example above is
the <command>overwrite</command> attribute. If set to
<option>yes</option>, files in this application which
overlap with existing files will overwrite the existing
ones. This is primarily used for overriding XSL
stylesheets. Thus in an APLAWS project, the
application containing custom styling will typically use
this option.</para>
</sect2>
<sect2 id="s2-px-ccm-prebuilt">
<title>&lt;ccm:prebuilt&gt;</title>
<para>This section contains a list of pre-built
applications. These application do not need to be
compiled, but will be deployed and packaged as part of
this project.</para>
<para>In the same way as the <command>extends</command>
and <command>extendsVersion</command> attributes of
<command>&lt;ccm:project&gt;</command> refer to the
extended applications development package, the
<command>name</command> and <command>version</command>
attributes of <command>&lt;ccm:prebuilt&gt;</command>
refer to the development package of a prebuilt
application.</para>
<para>APLAWS projects do not normally use any prebuilt
applications. It is fine for this section to be
empty or, as in the example above, the contents to be
commented out.</para>
</sect2>
</sect1>
<sect1 id="s1-config-dot-vars">
<title>Server Configuration <filename>config.vars</filename> and <filename>enterprise.init</filename></title>
<para>The server initialization file for a &CCM; based project is
called <filename>enterprise.init</filename>. It is generated from a
number of fragments in its component applications usually stored in
<filename>
<replaceable>application</replaceable>/etc/enterprise.init.in
</filename> and from the parameter values set in
<filename>config.vars</filename>. <filename>config.vars</filename>
in turn, is created by pulling all
placeholder variables out of
<filename>enterprise.init.in</filename> fragments in a project's
component applications. <filename>config.vars</filename> and <filename>enterprise.init</filename> does not exist at the beginning of the project. Here are the steps you must take at the beginning of a project.
<orderedlist>
<listitem><para>Run <command> ant make-config </command> (<xref linkend="s2-ant-make-config">) - this will generate <filename>config.vars</filename>.
</para></listitem>
<listitem><para>Edit <filename>config.vars</filename> and set the parameters to suit your project.
</para></listitem>
<listitem><para> Run <command>ant make-init </command> - This will generate
<filename>enterprise.init</filename> from the values in
<filename>config.vars</filename> and the various
<filename>enterprise.init.in</filename> files (<xref
linkend="s2-ant-make-init"/>).
</para></listitem>
</orderedlist>
</para>
<note><title>Note:</title><para>You should always edit <filename>config.vars</filename> and
not <filename>enterprise.init</filename>. The changes you make to
<filename>config.vars</filename> is merged into
<filename>enterprise.init</filename> with the ant command <command>ant
make-init</command> (<xref
linkend="s2-ant-make-init"/>).</para>
</note>
<sect2 id="s2-sample-config-dot-vars">
<title>Sample <filename>config.vars</filename></title>
<para>
APLAWS is designed to be configurable, however you can leave
many of these parameters as they are to get a basic installation. At the bare minimum you will need to edit the following paramters.
<itemizedlist>
<listitem>
<para><command>db-pass</command>: Database password
</para>
</listitem>
<listitem>
<para>
<command>db-user</command>: Database user
</para>
</listitem>
<listitem>
<para>
<command>debug-mode</command>: Determines wheather whitespace is
stripped from the HTML output. This should be set to true for
development.
</para>
</listitem>
<listitem>
<para>
<command>jdbc-url</command>: The JDBC URL to the
database instance. For Oracle this value should match
the entry in
<filename>$ORACLE_HOME/network/admin/tnsnames.ora</filename>. For
Postgres the entry should be
<command>jdbc:postgresql://<userinput>servername</userinput>/<userinput>databasename</userinput>.
</command>
</para>
</listitem>
<listitem>
<para>
<command>log-dir</command>: This should point to
<filename>/var/ccm-devel/web/<replaceable>username</replaceable>/<replaceable>projectname</replaceable>/logs</filename>
for the <command>taillogs</command> to work.
</para>
</listitem>
<listitem>
<para>
<command>lucene-index-location</command>: On a
Postgres environment the search engine needs to be set to Lucene. The
index location should be a directory that the development user can
write to, the recommended directory is
<filename>/var/ccm-devel/web/<replaceable>username</replaceable>/<replaceable>projectname</replaceable>/lucene.dat</filename>
</para>
</listitem>
<listitem>
<para>
<command>search-lucene-enabled</command>: Set to false
for Oracle, true for a Postgres environment.
</para>
</listitem>
<listitem>
<para>
<command>search-intermedia-enabled</command>: Set to
true for Oracle, false for Postgres.
</para>
</listitem>
<listitem>
<para>
<command>state-dir</command>: The directory where
server state files will be written, this should be a directory that's
writable by the development user. The recommended directory is
<filename>/var/ccm-devel/web/<replaceable>username</replaceable>/<replaceable>projectname</replaceable>/run</filename>.
</para>
</listitem>
<listitem>
<para>
<command>xslt-engine</command>: Options are Xalan,
Saxon, and JD.XSLT. The recommended parser is JD.XSLT.
</para>
</listitem>
</itemizedlist>
can leave many of this values as they are. But you will need to change
the values of parameters such as db-pass, db-user, jdbc-url, log-dir,
state-dir. The # sign is a comment marker, below is
an annotated <filename>config.vars</filename>.
</para>
<para>
<screen>
<computeroutput>
# ACS initialization file
admin-answer = 6 # Answer for web admin user's password reminder question
admin-email = admin@example.com # email address of the web admin user
admin-forename = Administrator # Forename of the web admin user
admin-password = 123456 # web admin user's password
admin-question = 12345 # web admin user password reminder question
admin-surname = Account # web admin user's surname
autoRegistration = true # redirect to registration form for unknown email addresses
cache-expiry = 900
cache-peers = # peer servers for multi-tiered environment, leave blank for development
caching-active = yes
<userinput>db-pass = ccm_xyz # Database password</userinput>
db-pool = 10 # database connection pool size
<userinput>db-user = ccm # Database useranme</userinput>
<userinput>debug-mode = true # Turn HTML indentation on/off for development</userinput>
default-locale = en_GB
default-scheme = http
developer-support = false
dispatcher-context-path = # leading URL stub
dispatcher-servlet-path =
dmi-active = false
dmi-data-model-file = "/WEB-INF/sql/ccm-core/default/dmi/dmi-create.sql"
dmi-xml-files = { "core-dmi.xml", "/WEB-INF/sql/ccm-core" }
hostname = ccm.example.com # hostname of the server
<userinput>jdbc-url = jdbc:oracle:oci8:@(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = oracle)(PORT = 1521)))(CONNECT_DATA = (SERVICE_NAME = ora8) (SRVR = DEDICATED))) #JDBC URL for the database server</userinput>
<userinput>log-dir = /var/ccm-devel/web/username/projectname/logs
# Log directory for the server, this value should point to the logs directory in your web directory</userinput>
log-level = warn
log-size = 1000000
login-stylesheet = login_en.xsl
<userinput>lucene-index-location = /var/ccm-devel/web/username/projectname/lucene
# If the database is Postgres the value should be changed to point to a directory in the web directory.
</userinput>
page-map = WEB-INF/resources/hereford-login-page-map.xml
permissionsDMLChecking = false
rememberLoginByDefault = true
<userinput>search-intermedia-enabled = true
# Change to false on a postgres environment
</userinput>
<userinput>search-lucene-enabled = false
# Change to true on a postgres environment
</userinput>
search-lucene-indexer-id = 0
server-name = localhost
server-port = 8080
<userinput>sitename = My APLAWS site
# name of your website</userinput>
smtp-host = localhost
<userinput>state-dir = /var/ccm-devel/web/username/projectname/state
# Value should point to a writable directory in the web directory
</userinput>
subsite-dispatcher-class = com.arsdigita.ui.login.SubsiteDispatcher
workflow-send-alerts = true
workflow-sender-email = workflow-alerts@example.com
# email notification sender for workflow alerts
workflow-sender-given-name = Workflow # Name of alert sender
workflow-sender-surname = Alerts # Surname of alert sender
<userinput>xslt-engine = JD.XSLT
# XSLT parser, options are Saxon, Xalan, JD.XSLT. JD.XSLT is recommended
</userinput>
<userinput>xslt-timeout = 60
# interval for XSLT, set to a smaller number for development
</userinput>
# CMS initialization file
cms-item-adapters = /WEB-INF/resources/hereford-item-adapters.xml
content-center-map = /WEB-INF/resources/content-center-map.xml
content-digest-sender = article-digest@herefordshire.gov.uk
content-section-name = content
default-folder-template = /default/folder.jsp
default-item-template = /default/item.jsp
default-root-category = true
forms-content-digest-sender = forms-digest@herefordshire.gov.uk
forms-section-name = forms
overdue-alert-interval = 24
overdue-duration = 96
overdue-max-alerts = 5
overdue-send-alerts = false
publish-to-fs-servers = "http://servlet1/", "http://servlet2/"
publish-to-fs-source = "http://servlet1/"
publish-to-fs-this-server = "http://servlet1/"
search-engine = intermedia
template-root = /packages/content-section/templates
# Portal initialization file
portal-url = /portal/
# Forum initialization file, the third item in the forum list of lists is weather the forum is moderated or not
adminCanEditPosts = true
authorCanEditPosts = true
digestUserEmail = digests
forums = {{"forum1", "Forum #1", false, "nasakai@redhat.com", "Forum #1 Moderation" }, {"forum2", "Forum #2", false, "nasakai@redhat.com", "Forum #2 Moderation"}}
replyHostName = devnull.redhat.com
#
search-spider-delay = 60
search-spider-frequency = 0
search-spider-urls = "http://www.redhat.com/", "http://www.example.org/"
# Navigation initialization file
default-content-section-url = "/content/"
related-items-purpose = "DUBLINCORE"
# Noticeboard initialization file
adminCanEditNotices = true
authorCanEditNotices = true
noticeboards = {{"noticeboard", "Noticeboard"}}
#
chat-control-host = localhost
chat-control-port = 8200
chat-public-host = localhost
chat-public-port = 8200
chat-start-server = false
# System Properties
project-name = hereford
</computeroutput>
</screen>
</para>
</sect2>
</sect1>
<sect1 id="s1-deploying-with-ant">
<title>Deploying with Ant</title>
<para>Compilation and deployment of &CCM; and &CCM; based projects is
done using <application>ant</application>. The options you can
give to the <command>ant</command> command are called
<emphasis>targets</emphasis>, and they are defined in the
<filename>build.xml</filename> file. There are two types of ant
targets that you will be using. The first set is the configuration
targets such as <command>ant
make-config</command>, <command>ant
update-config</command>, and <command>ant
make-init</command>. The second set are the
<emphasis>deploy</emphasis> targets : The &CCM; build
tools configures ant to compile or copy the files from the
and the
shared source directory
into the web
directory. The most commonly used deploy targets are the following: <command>ant
deploy-config</command>, <command>ant deploy</command>, and
<command>ant
deploy-<replaceable>application</replaceable></command>.For a complete list for your project, type
<command>ant</command> on its own. Please see <xref linkend="s2-ant-make-config">,<xref
linkend="s2-ant-update-config"/>, <xref
linkend="s2-ant-make-init"/>, <xref linkend="s2-project-directory"/>, <xref linkend="s2-shared-source-directory"/>, <xref linkend="s2-web-directory">, <xref
linkend="s2-ant-deploy-config"/>, <xref
linkend="s2-ant-deploy"/>, <xref linkend="s2-ant-make-init"></para>
<note>
<title>Note</title>
<para>Ant's configuration file is <filename>build.xml</filename>.
This file is automatically generated by
<command>ccm-configure.sh</command> from
<filename>project.xml</filename>. Immediately after creating a
project or making any change to <filename>project.xml</filename>,
you must re-run <command>ccm-configure.sh</command> otherwise ant
will not work as desired.</para>
</note>
<caution>
<para> While you should not need to edit build.xml yourself, if you
would like to find out more, you can refer to the documentation at
the <ulink url="http://ant.apache.org/">ant homepage</ulink>.</para>
</caution>
<note><title>Running ant:</title>
<para> All ant commands must be run from the top level project
directory (the directory that contains
<filename>build.xml</filename>. This should be the directory that you
are in after you execute <command>cddev</command> (<xref
linkend="s2-cddev"/>).</para>
</note>
<sect2 id="s2-ant-make-config">
<title><filename>ant make-config</filename></title>
<para>Generates the configuration file <filename>config.vars</filename> by pulling all
placeholder variables out of
<filename>enterprise.init.in</filename> fragments in a project's
component applications.
</para>
<caution>
<title>Caution</title>
<para>Only run <command>ant</command>
<option>make-config</option>
<emphasis>once</emphasis> as subsequent executions will overwrite any
customizations you have made to your <filename>config.vars</filename>
.
After the initial creation, keep it up-to-date with <command>ant update-config</command> (<xref linkend="s2-ant-update-config">).</para>
</caution>
</sect2>
<sect2 id="s2-ant-update-config">
<title>
<command>ant update-config</command>
</title>
<para>
Examines the <filename>enterprise.init.in</filename> files and adds any new/changed parameters to <filename>config.vars</filename>. This command will preserve the parameter values that you have set.
</para>
</sect2>
<sect2 id="s2-ant-make-init">
<title>ant make-init</title>
<para>This command will generate <filename>enterprise.init</filename> by
concatenated all <filename>enterprise.init.in</filename>
fragments in component applications and substituting values in
<filename>config.vars</filename>.</para>
<note><title>Note:</title>
<para>This only creates <filename>enterprise.init</filename> in
the development directory. For it to be used it must be
deployed. This is one of the tasks performed by the
<command>deploy</command> target, or to deploy it on its own you
can use <command>ant deploy-config</command>
(<xref linkend="s2-ant-deploy-config">) </para>
</note></sect2>
<sect2 id="s2-ant-deploy-config">
<title>
<command>ant deploy-config</command>
</title>
<para> This deploys only configuration information. This includes
<filename>enterprise.init</filename> and
<filename>web.xml</filename>. Use this target if you have made changes
to either of these files, for example by using the
<option>make-init</option> target. This command copies
<filename>enterprise.init</filename> from the dev directory to the
web directory. The file is located at
<filename>/var/ccm-devel/web/<replaceable>username</replaceable>/<replaceable>projectname</replaceable>/webapps/ccm/WEB-INF/resources/enterprise.init</filename>.</para>
</sect2>
<sect2 id="s2-ant-deploy">
<title><command>ant deploy</command></title>
<para>This deploys the entire project including all
applications, the parent project if any and all
configuration information.</para>
</sect2>
<sect2 id="s3-deploy-application">
<title><command>deploy-<replaceable>application</replaceable></command></title>
<para>When you have only made changes to a single
application and don't need to redeploy the whole
project, use this target to deploy just a single
application.</para>
<para>For example, <command>ant</command>
<option>deploy-aplaws-custom</option> will deploy only
the <filename>aplaws-custom</filename>
application.</para>
</sect2>
<sect2 id="s2-ant-clean">
<title><command>ant clean</command></title>
<para>This removes all deployed files and directories,
and all compiled classes from build
directories. In other words this commands removes files in
<filename>webapps/ccm</filename> in the development web directory (<xref
linkend="s2-web-directory"/>). Use
this when you need to be sure that your project is
rebuilt cleanly, for example after changing
<filename>project.xml</filename> or before building a
package for deployment on a live server.</para>
</sect2>
</sect1>
<sect1 id="s1-dev-database">
<title>Setting Up the Database</title>
<para> You will need to have a database instance that you can
use for development. These steps should be conducted by your DBA, the
following is the instructions for Postgres and Oracle environments. If
you need instructions on setting up your database server please see
<xref linkend="s3-pg-createdatabase"/>.
</para>
<sect2 id="s2-pg-load-datamodel">
<title>Loading the Datamodel for Postgres</title>
<para>
<command>cdweb</command> to change to the web directory and
change into <filename>webapps/ccm/WEB-INF/sql</filename>. You will
find a file called <command>postgres-create.sh</command>.
Run this command with your database parameters to load the
datamodel.
<screen>
<computeroutput>
$ sh postgres-create.sh <userinput>dbname</userinput> <userinput>dbusername</userinput> <userinput>db server hostname</userinput>
</computeroutput>
</screen>
</para>
</sect2>
<sect2 id="s2-ora-load-datamodel">
<title>Loading the Datamodel for Oracle</title>
<para>
<command>cdweb</command> to change to the web directory and
change into <filename>webapps/ccm/WEB-INF/sql</filename>. You will
find a file called <command>oracle-create.sh</command>, the
argument for this script should be the database connection
string you use to connect to the database via
<command>sqlplus</command>. For example, if you connect to your Oracle
instance with the following command:
<screen>
<computeroutput>
sqlplus <userinput>my_aplaws/my_aplaws@myoracleserver</userinput>
</computeroutput>
</screen>
Then you should run <command>oracle-create.sh</command> like this:
<screen>
<computeroutput>
$ sh oracle-create.sh <userinput>my_aplaws/my_aplaws@myoracleserver</userinput>
</computeroutput>
</screen>
</para>
</sect2>
</sect1>
</chapter>

View File

@ -0,0 +1,832 @@
<chapter id="ch-installing-aplaws">
<title>Installing APLAWS</title>
<para>APLAWS is normally installed on a four server
high-availability configuration. The web server will contain
Apache and Squid reverse proxy server, and serve as the front
end. Two or more application servers will run the actual APLAWS
codebase, normally using Resin. The database server will have
either a Postgres or an Oracle database installed. The details of
each server configuration is detailed below, however this guide
will not cover OS installation or Oracle database
installation.</para>
<note>
<title>Caution</title>
<para>
There are many steps involved in conducting a full production
installation of APLAWS. While we try to cover everything in as much
detail as possible it is recommended that you have a RedHat engineer
either conduct the installtion or check the installation after
completion.
</para>
</note>
<sect1 id="s1-quick-install-guide">
<title>Quick Guide for the Impatient</title>
<para>Here is what you have to do to conduct a full production
installation of APLAWS. As you can see there are many steps
involved, and many things can go wrong during the
process.</para>
<para>
<orderedlist>
<listitem>
<para>Configure the database server.
<itemizedlist>
<listitem>
<para>Install the database</para>
</listitem>
<listitem>
<para>Create the user and the
tablespace/database</para>
</listitem>
</itemizedlist></para>
</listitem>
<listitem>
<para>Set up the application server
<itemizedlist>
<listitem>
<para>Ensure that you can connect to the database via
psql or sqlplus.</para>
</listitem>
<listitem>
<para>InstallIBMJava2-JRE and IBM-JAVA2-JDK.</para>
</listitem>
<listitem>
<para>Install resin-xxx.rpm</para>
</listitem>
<listitem>
<para>Install aplaws-xxx.noarch.rpm and
aplaws-servlet-resin-xxx.rpm no the application
server.</para>
</listitem>
<listitem>
<para>Configure the APLAWS instance and ensure that
it is serving pages.</para>
</listitem>
</itemizedlist></para>
</listitem>
<listitem>
<para>Configure the web server
<itemizedlist>
<listitem>
<para>Configure Apache virtual hosts so that it is
connecting to the Resin instances via s-run.</para>
</listitem>
<listitem>
<para>Configure Squid to serv as a reverse
proxy.</para>
</listitem>
</itemizedlist></para>
</listitem>
</orderedlist>
</para>
</sect1>
<sect1 id="s1-database-server">
<title>Setting up the database server</title>
<para>APLAWS will run on PostgreSQL or Oracle database
servers.</para>
<sect2 id="s2-postgres-setup">
<title>Installing PostgreSQL server</title>
<para>You will need to install the following RPMS
<itemizedlist>
<listitem>
<para>rh-postgresql-7.3.4-8</para>
</listitem>
<listitem>
<para>rh-postgresql-jdbc-7.3.4-8</para>
</listitem>
<listitem>
<para>rh-postgresql-libs-7.3.4-8</para>
</listitem>
<listitem>
<para>rh-postgresql-server-7.3.4-8</para>
</listitem>
</itemizedlist></para>
</sect2>
<sect2 id="s2-pg-tcp-connection">
<title>Enabling TCP Connection</title>
<para>After installing a PostgreSQL database server you will
need to edit the configuration to enable TCP connections from
the application servers.</para>
<sect3 id="s3-postgres_conf">
<title>
<filename>postgres.conf</filename>
</title>
<para>Edit
<filename>/var/lib/pgpsql/data/postgres.conf</filename>to
set tcpip_socket to true.
<screen>
<computeroutput>
# tcpip_socket = false
tcpip_socket = true
</computeroutput>
</screen></para>
</sect3>
<sect3 id="s3-pg_hba_conf">
<title>
<filename>pg_hba.conf</filename>
</title>
<para>Add parameters to the end of
<filename>/var/lib/pgpsql/data/pg_hba.conf</filename>to
allow connections from the application server. The second
line is an example configuration for an app server with the
IP 172.16.68.0 and a netmask 255.255.255.0. You can set the
policy to be md5 or trust. For more information please
consult the
<ulink url="http://postgresql.org">Postgres Manual</ulink>.
<screen>
<computeroutput>
# Put your actual configuration here
# ----------------------------------
#
# CAUTION: The default configuration allows any local user to connect
# using any PostgreSQL user name, including the superuser, over either
# Unix-domain sockets or TCP/IP. If you are on a multiple-user
# machine, the default configuration is probably too liberal for you.
# Change it to use something other than "trust" authentication.
#
# If you want to allow non-local connections, you need to add more
# "host" records. Also, remember TCP/IP connections are only enabled
# if you enable "tcpip_socket" in postgresql.conf.
# TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD
#local all all trust
#host all all 127.0.0.1 255.255.255.255 trust
# Using sockets credentials for improved security. Not available everywhere,
# but works on Linux, *BSD (and probably some others)
local all all ident sameuser
host all all 172.16.68.0 255.255.255.0 md5
host all all 127.0.0.1 255.255.255.255 md5
</computeroutput>
</screen>
</para>
</sect3>
<sect3 id="s3-pg-start-database">
<title>Database Startup</title>
<para>Once the configuration is complete you will need to
start the database as the root user.</para>
<screen><computeroutput># service rhdb start</computeroutput></screen>
</sect3>
<sect3 id="s3-pg-createdatabase">
<title>Create User and Database</title>
<para>As the postgres user, you will need to enable plpgsql
for your databse. Then you will need to create an Unicode
database and a user for your APLAWS installation.</para>
<screen><computeroutput>
# su - postgres
$ createlang plpgsql template1
$ createuser aplaws
$ createdb -E unicode aplaws
</computeroutput></screen>
<para>At this point you should test your installation by
logging into the database.</para>
</sect3>
<sect3 id="s3-pg-client">
<title>Client Installation</title>
<para>You will need to install the following RPMS on the
application server.
<itemizedlist>
<listitem>
<para>rh-postgresql-7.3.4-8</para>
</listitem>
<listitem>
<para>rh-postgresql-jdbc-7.3.4-8</para>
</listitem>
<listitem>
<para>rh-postgresql-libs-7.3.4-8</para>
</listitem>
</itemizedlist></para>
<para>Test that you can connect to the database server.
<screen><computeroutput>
$ psql -h <userinput>database server</userinput>-U aplaws aplaws
</computeroutput></screen></para>
</sect3>
</sect2>
</sect1>
<sect1 id="s1-application-server-setup">
<title>Setting up the application server</title>
<sect2 id="s2-app-software">
<title>Required Software</title>
<para>You will need to install the following RPMS on the
application server.
<itemizedlist>
<listitem>
<para>IBMJava2-SDK</para>
</listitem>
<listitem>
<para>IBMJava2-JRE</para>
</listitem>
<listitem>
<para>resin (not versions 2.0 or 2.3)</para>
</listitem>
<listitem>
<para>aplaws-xxx.noarch.rpm</para>
</listitem>
<listitem>
<para>aplaws-servlet-resin-xxx.noarch.rpm</para>
</listitem>
</itemizedlist></para>
<para>For IBMJava and resin you do not need to do anything
beyond simple
<command>rpm -Uvh</command>.</para>
</sect2>
<sect2 id="s2-app-install-rpm-project">
<title>Installing the RPMs</title>
<para>You will need to install the two RPMs
<filename>
<replaceable>
projectname</replaceable>-x.x.x-x.noarch.rpm</filename>, and
<filename>
<replaceable>
projectname</replaceable>-servlet-resin-x.x.x-x.noarch.rpm</filename>together
as the two are interdependent.
<filename>
<replaceable>
projectname</replaceable>-x.x.x-x.noarch.rpm</filename>will
install your code in
<filename>/var/www/
<replaceable>projectname</replaceable></filename>where it
will be used by your application server. This RPM also
installs the init file
<filename>/etc/init.d/
<replaceable>projectname</replaceable></filename>, the
configuration script
<filename>/usr/sbin/
<replaceable>
projectname</replaceable>-configure.pl</filename>, and the
log directory
<filename>/var/log/
<replaceable>projectname</replaceable>.</filename></para>
</sect2>
<sect2 id="s2-web-install-rpm-servlet">
<title>Installing the Project RPMs</title>
<para>The servlet RPM will install configuration files and
wrapper scripts for controlling the servlet container.
Specifically it will install the following files:
<itemizedlist>
<listitem>
<para>
<filename>/usr/share/
<replaceable>
projectname</replaceable>/bin/resin/run-apache.sh.in</filename>
</para>
</listitem>
<listitem>
<para>
<filename>/usr/share/
<replaceable>
projectname</replaceable>/bin/resin/run-resin.sh.in</filename>
</para>
</listitem>
<listitem>
<para>
<filename>/usr/share/
<replaceable>
projectname</replaceable>/bin/resin/run.sh.in</filename>
</para>
</listitem>
<listitem>
<para>
<filename>/usr/share/
<replaceable>
projectname</replaceable>/conf/resin</filename>
</para>
</listitem>
<listitem>
<para>
<filename>/usr/share/<replaceable>projectname</replaceable>/conf/resin/httpd-resin-vhost.conf.in</filename>
</para>
</listitem>
<listitem>
<para>
<filename>/usr/share/
<replaceable>
projectname</replaceable>/conf/resin/resin-back.conf.in</filename>
</para>
</listitem>
<listitem>
<para>
<filename>/usr/share/
<replaceable>
projectname</replaceable>/conf/resin/resin-front.conf.in</filename>
</para>
</listitem>
</itemizedlist></para>
<para>These files are templates for your installation. When
you run the command
<command>/usr/sbin/
<replaceable>
projectname</replaceable>-configure.pl</command>copies of
these files will be placed in
<filename>/var/www/
<replaceable>projectname</replaceable>/conf</filename>and
<filename>/var/www/
<replaceable>projectname</replaceable>/bin</filename>. They
will also be edited to reflect the parameters you set in
<filename>/etc/
<replaceable>projectname</replaceable>.cfg</filename></para>
</sect2>
<sect2 id="s2-app-project-dot-cfg">
<title>The
<filename>
<replaceable>projectname</replaceable>.cfg</filename></title>
<para>Once the RPMs are installed you will need to edit the
configuration file for your server. The template for the
config file is
<filename>/etc/
<replaceable>projectname</replaceable>.cfg-resin</filename>.
Copy this file to
<filename>/etc/
<replaceable>projectname</replaceable>.cfg</filename>and edit
the parameters much like how you edited
<filename>config.vars</filename>. Some of the parameters are
not in
<filename>config.vars</filename>and you will need to change
the values depending on how your Resin and HTTP servers are
set up. Below is an example of a configuration file for a
production installation with two Resin application servers
and one Apache front end. The values you need to change in
addition to what what you find in
<filename>config.vars</filename>is emphasised with additional
comments. The Resin servers are called resin1.example.com and
resin2.example.com and the Apache server is called
apache.example.com.</para>
<note>
<title>
<command>hostname</command>
</title>
<para>The hostnames for the servers need to be exactly as
they appear when you run the
<command>hostname</command>command. If you want to change
the default behavior of
<command>hostname</command>to return the short name or the
fully qualified domain name here is what you can do:</para>
<para>Edit
<filename>/etc/sysconfig/network</filename>and change
HOSTNAME to be the fully qualified domain name. You can
also use the gui tools
<command>netconfig</command>and
<command>redhat-config-network</command>to do this. These
changes will only take effect after the machine has been
restarted. To change it at runtime pass an argument to
<command>hostname</command>as root.
<screen>$ hostname resin1.example.com</screen>You can test
this by running
<command>hostname</command>with no arguments.</para>
</note>
<screen><computeroutput>
##########################################
# APLAWS Master configuration file #
#########################################
servlet-container = resin
## This is set to servlet23 by default but should be resin
<userinput>servlet-webxml = resin</userinput>
# NB: all hostnames used should be
# the fully qualified name as returned
# by the 'hostname' command with no arguments.
####################################
# UNIX system level configuration
# Installation directory for resin
## This should be the directory of your Resin installation
<userinput>resin-home = /opt/resin/2.1.8</userinput>
# Installation directory for this app
app-home = /var/www/aplaws
# Directory containing the base runtime &amp; config files
runtime-home = /usr/share/aplaws
# UNIX accounts to run as
user = servlet
group = servlet
# Whereever you installed JDK 1.3.1
# java-home = /usr/j2se
# java-home = /usr/java/jdk1.3.1
## The java-home should point to $JAVA_HOME
<userinput>java-home = /opt/IBMJava2-131</userinput>
# Userinputly tell java to use more memory
#
# For Sun's JDK, on a machine with 1GB
#jre-args = -J-client -J-Xss128k -J-Xms512m -J-Xmx512m -J-XX:NewSize=128m -J-XX:MaxNewSize=128m
#
# For IBM's JDK on a machine with 256MB
#jre-args = -J-Xms128m -J-Xmx128m
<userinput>jre-args = -J-Xms1536m -J-Xmx1536m</userinput>
# The hostname of the front end apache box
<userinput>apache = apache.example.com</userinput>
# The hostnames of the back end resin boxes
<userinput>resin = resin1.example.com</userinput>
<userinput>resin = resin2.example.com</userinput>
# The SRUN ports for apache to talk to the resin
# boxes. The 'hostname:port' pair designates which
# srun port each resin instance listens on.
# If there is a firewall, between the resin and
# apache boxes, a second 'hostname:port' pair
# specifies the host and port of the firewall
#
# eg1. no firewall
<userinput>srun = resin1.example.com:6802</userinput>
<userinput>srun = resin2.example.com:6802</userinput>
# eg2. with firewall
<userinput>#srun = resin1.example.com:6082, firewall:6802</userinput>
<userinput>#srun = resin2.example.com:6082, firewall:6803</userinput>
# Turn on http listening on either apache
# or resin boxes. Only need http port on
# the resin boxes for debugging purposes
<userinput>http = apache.example.com:80</userinput>
# Only for debugging
<userinput>http = resin1.example.com:8080</userinput>
<userinput>http = resin2.example.com:8080</userinput>
# ACS initialization file
admin-answer = 6
admin-email = admin@example.com
admin-forename = Administrator
admin-password = 123456
admin-question = 12345
admin-surname = Account
cache-expiry = 900
<userinput>cache-peers = "http://resin1.example.com:8080"</userinput>
caching-active = yes
db-pass = aplaws_xyz
db-pool = 150
db-user = aplaws
debug-mode = false
default-locale = en_US
default-scheme = http
developer-support = false
dispatcher-context-path =
dispatcher-servlet-path =
dmi-active = false
dmi-data-model-file = "/WEB-INF/sql/ccm-core/default/dmi/dmi-create.sql"
dmi-xml-files = { "core-dmi.xml", "/WEB-INF/sql/ccm-core" }
<userinput>host-name = apache.example.com</userinput>
<userinput>hostname = apache.example.com</userinput>
jdbc-url = jdbc:postgresql://postgres.example.com/aplaws
log-dir = /var/log/aplaws
log-level = warn
log-size = 1000000
login-stylesheet = login_en.xsl
lucene-index-location = /var/www/aplaws/lib/lucene-index
permissionsDMLChecking = false
search-intermedia-enabled = false
search-lucene-enabled = true
search-lucene-indexer-id = 2
<userinput>server-name = apache.example.com</userinput>
server-port = 80
sitename = APLAWS
smtp-host = localhost
state-dir = /var/www/aplaws/lib
subsite-dispatcher-class = com.arsdigita.ui.login.SubsiteDispatcher
xslt-engine = Saxon
xslt-timeout = 60000
# WCT CMS Initialization File
content-digest-sender = article-digest@example.com
forms-content-digest-sender = forms-digest@foo.com
inso_filter_works = 0
<userinput>publish-to-fs-servers = "http://resin1.example.com/", "http://resin2.example.com/"</userinput>
<userinput>publish-to-fs-source = "http://resin2.example.com/"</userinput>
<userinput>publish-to-fs-this-server = "http://resin2.example.com/"</userinput>
search-engine = lucene
# Version: $Id: installing-aplaws.sgml 287 2005-02-22 00:29:02Z sskracic $ $Date: 2004/01/23 $
adminCanEditPosts = true
authorCanEditPosts = true
digestUserEmail = digests
<userinput>replyHostName = apache.example.com</userinput>
# Navigation initialization file
default-content-section-url = "/content/"
# System Properties
project-name = aplaws
</computeroutput>
</screen>
</sect2>
<sect2 id="s2-app-aplaws-configure-dot-pl">
<title>
<command>/usr/sbin/ <replaceable>projectname</replaceable>-configure.pl</command>
</title>
<para>Once you have edited
<filename>/etc/
<replaceable>
projectname</replaceable>.cfg-resin</filename>you can run
<command>/usr/sbin/
<replaceable>
projectname</replaceable>-configure.pl</command>to generate
the config files and the run scripts for your server to use.
Make sure that you do not get errors after you run this
command.
<command>/usr/sbin/
<replaceable>
projectname</replaceable>-configure.pl</command>copies files
from
<filename>/usr/share/
<replaceable>
projectname</replaceable>/bin/resin/</filename>and replaces
the parameter values with what you have set in the
configuration file and places them in
<filename>/var/www/
<replaceable>projectname</replaceable>/conf</filename>. It
also generates the wrapper run scripts in
<filename>/var/www/
<replaceable>projectname</replaceable>/bin</filename>.
<screen>
<computeroutput>
bash-2.03# /usr/sbin/aplaws-configure.pl /etc/aplaws.cfg Reading /etc/aplaws.cfg
Wrote /var/www/aplaws/dist/WEB-INF/resources/enterprise.init
Wrote /var/www/aplaws/dist/WEB-INF/web.xml
Wrote /var/www/aplaws/bin/run-resin.sh
Wrote /var/www/aplaws/conf/resin.conf
Wrote /var/www/aplaws/bin/run.sh
</computeroutput>
</screen></para>
<para>Here is a list of the files and how they are modified.
<itemizedlist>
<listitem>
<para>
<filename>
/var/www/aplaws/dist/WEB-INF/resources/enterprise.init</filename>:
Initialization file used for the APLAWS server. Contains
settings for the individual APLAWS packages such as
database connection parameters, content types, and
stylesheet engine, i.e. the paramters after
<command># ACS initialization file</command>in
<filename>aplaws.cfg</filename>.</para>
</listitem>
<listitem>
<para>
<filename>
/var/www/aplaws/dist/WEB-INF/web.xml:</filename>:
Configured to work with Resin set by the line:
<command>servlet-container = resin</command>in
<filename>aplaws.cfg</filename>.</para>
</listitem>
<listitem>
<para>
<filename>/var/www/aplaws/bin/run-resin.sh</filename>:
Wrapper script for starting and stopping Resin. Contains
information such as JAVA_HOME, RESIN_HOM, and JVM setting
(e.g.
<command>app-home</command>,
<command>runtime-home</command>,
<command>java-home</command>,
<command>jre-args</command>).</para>
</listitem>
<listitem>
<para>
<filename>/var/www/aplaws/conf/resin.conf</filename>:
Configuration for the Resin servlet container. Contains
information such as s-run port number, http port number,
and maximum number of processes (i.e.
<command>srun</command>,
<command>http</command>.</para>
</listitem>
</itemizedlist></para>
</sect2>
<sect2 id="s2-starting-the-server">
<title>Starting the server</title>
<para>Once the configuration files and the wrapper scripts
are written you can start, stop, and restart your sever using
<command>/etc/init.d/
<replaceable>projectname</replaceable></command>. The log
files are located in your specified directory, by default
<filename>/var/log/
<replaceable>projectname</replaceable></filename>. You should
<command>tail -f /var/log/
<replaceable>projectname</replaceable>/*.log</command>to
monitor the progress of your server startup.</para>
<note>
<title>
<command>/etc/init.d/
<replaceable>
projectname</replaceable></command>restart</title>
<para>When you restart the server the command will pause
for a number of seconds to wait for the application server
to completely exit.</para>
</note>
<para>Once you are happy with your installation you should
set APLAWS to startup automatically at reboot by running
<command>chkconfig aplaws on</command>.</para>
</sect2>
</sect1>
<sect1 id="s1-web-server">
<title>Configuring the Web Server</title>
<sect2 id="s2-web-software">
<title>Required Software</title>
<para>You will need to install the following software to your
webserver.
<itemizedlist>
<listitem><para>resin source (tar.gz)</para></listitem>
<listitem><para>apache</para></listitem>
<listitem><para>apache-devel</para></listitem>
<listitem><para>squid</para></listitem>
<listitem><para>aplaws-xxx.noarch.rpm</para></listitem>
<listitem><para>aplaws-servlet-resin-xxx.noarch.rpm</para></listitem>
</itemizedlist>
</para>
<para>You need Resin sources and apache-devel package because
you will need to compile and install mod_caucho. You should
use Apache and Squid that comes with your Advanced Server.
Even though you will not be serving pages out of Resin on the
web server, you need to install the aplaws packages because
Apache will be serving static files directly from the file
system to improve performance.</para>
</sect2>
<sect2 id="s2-web-mod_caucho">
<title>mod_caucho</title>
<para>First install resin in
<filename>/opt</filename>by untaring the source distribution.
Run the following command to install mod_caucho.
<screen><computeroutput>$ ./configure --with-apache /usr/sbin</computeroutput></screen></para>
<note>
<title>Reference</title>
<para>If you have problems with this section, or have a
non-standard Apache installation consult the manual
<ulink url="http://caucho.com/resin/ref/cse-apache-unix.xtp">
Resin with Apache on Unix</ulink>.</para>
</note>
</sect2>
<sect2 id="s2-web-aplaws-package">
<title>Installing the APLAWS RPMs</title>
<para>You do not need to configure virtual hosting and
mod_caucho manually. Installing and configuring the APLAWs
RPMs will do this for you. Follow the instructions at
<xref linkend="s2-install-rpm-servlet" />and configure and
install the RPMs. When you run the script
<command>/usr/sbin/aplaws-configure.pl
/etc/aplaws.cfg</command>configuration files will be written
to the file system. Here is a list of affected files and
highlights of the changes.
<itemizedlist>
<listitem>
<para>
<filename>/etc/httpd/httpd.conf</filename>: Adds a
directive to include the vhost configuration file
<filename>
/var/www/aplaws/conf/httpd-resin-vhost.conf</filename>.</para>
</listitem>
<listitem>
<para>
<filename>
/var/www/aplaws/conf/httpd-resin-vhost.conf</filename>:
Sets the DocumentRoot to be
<filename>/var/www/aplaws/dist</filename>and the
CauchoConfigFile for mod_caucho as
<filename>
/var/www/aplaws/dist/resin-apache.conf</filename>.</para>
</listitem>
<listitem>
<para>
<filename>resin-apache.conf</filename>: Sets the location
of the application server by defining the IP and the
s-run port that the resin server is listening on.</para>
</listitem>
</itemizedlist></para>
<note>
<title>Check</title>
<para>At this point you should be able to retrive pages
from application server via Apache. Test the connection by
running
<command>wget http://localhost</command>or using
<command>telnet</command>.</para>
</note>
</sect2>
<sect2 id="s2-web-squid">
<title>Configuring SQUID</title>
<para>In this section you will configure Squid to be the web
accelerator for Apache. This step is not required but
strongly recommended as it will significantly increase the
performance of your site.</para>
<para>For virtual hosting to work correctly (particularly
with IE) we need to run both Apache and SQUID on the same
machine and port number. This means we must tell apache on
only bind to 127.0.0.1 and SQUID to only bind to the machines
public ip address.</para>
<sect3 id="s3-web-port-settings">
<title>Setting the Listen ports on Apache and Squid</title>
<para>In /etc/httpd/conf/httpd.conf uncomment and change
<screen><computeroutput>BindAddress *</computeroutput></screen>
to
<screen><computeroutput>BindAddress 127.0.0.1</computeroutput></screen>
Next, uncomment and change
<screen><computeroutput>Listen 80</computeroutput></screen>
To
<screen><computeroutput>Listen 127.0.0.1:80</computeroutput></screen>
Then go down to the &lt;IfDefine
HAVE_SSL&gt; block containin the two Listen statements and
add
<screen><computeroutput>Listen 127.0.0.1:443</computeroutput></screen>
In /etc/squid/squid.conf change
<screen><computeroutput># http_port 3128</computeroutput></screen>
To
<screen><computeroutput>http_port 192.168.168.199:80</computeroutput></screen>
</para>
</sect3>
<sect3 id="s3-web-squid-acl">
<title>Configuring permissions for Squid</title>
<para>The default SQUID config doesn't cache urls with
query parameters in them. This is only for compatability
with badly written CGI scripts that don't send cache
control headers. We do things properly so we need to change
this behaviour. So in the squid config, comment out
<screen><computeroutput>
#hierarchy_stoplist cgi-bin ?
#acl QUERY urlpath_regex cgi-bin \?
#no_cache deny QUERY
</computeroutput></screen>
Turn on referers and useragents so that
log analysis is useful
<screen><computeroutput>
useragent_log /var/log/squid/agent.log
referer_log /var/log/squid/referer.log
</computeroutput></screen>
You'll need our custom version of SQUID
compiled with
<command>--enable-referer-log</command>and
<command>--enable-agent-log options</command>.</para>
<para>Next we add some access control rules to allow public
users to access the cache. Add the following lines near the
other block of acl definitions:
<screen><computeroutput>
acl accel_host dst 127.0.0.1/255.255.255.255
acl accel_host dst 192.168.168.199/255.255.255.255
acl accel_port port 80
</computeroutput></screen>
If the firewall in front of the SQUID
server has a different IP address to the network interface
you need to add that in as well.
<screen><computeroutput>acl accel_host dst 193.132.194.147/255.255.255.255</computeroutput></screen>
Then, allow access to requests matching
these acls. Comment out
<screen><computeroutput>#http_access deny all</computeroutput></screen>
Add in
<screen><computeroutput>
http_access deny !accel_host
http_access deny !accel_port
http_access allow all
</computeroutput></screen>
</para>
</sect3>
<sect3 id="s3-web-squid-misc">
<title>Configureing Squid for HTTP Acceleration</title>
<para>Set the main hostname
<screen><computeroutput>visible_hostname www.stoke.gov.uk</computeroutput></screen>
SQUID limits HTTP file uploads to 1 MB in
size, so we need to increase this to at least 20 MB
otherwise CMS file storage is rather limited in usefulness:
<screen><computeroutput>request_body_max_size 20 MB</computeroutput></screen>
Finally, tell SQUID to be an accellerator
for the apache server:
<screen><computeroutput>httpd_accel_host 127.0.0.1 httpd_accel_port 80</computeroutput></screen>
Finally for virtual hosting to work, we set
<screen><computeroutput>
httpd_accel_single_host on
httpd_accel_uses_host_header on
</computeroutput></screen>
</para>
<note>
<title>Test</title>
<para>This configuration separates the IP and port that
Squid listens to from the Apache port. So if you do
<command>wget -S http://localhost</command>you are
connecting to Apache, if you do
<command>wget -S http://
<userinput>your-external-ip</userinput></command>you are
connecting to Squid. This difference will helpful in
determining the point of failure if you have
problems</para>
</note>
<para>Once you are happy with your installation you should
set Apache and Squid to startup automatically at reboot by using
<command>chkconfig</command>. </para>
</sect3>
</sect2>
</sect1>
</chapter>

View File

@ -0,0 +1,85 @@
<!DOCTYPE Book PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
<!-- *************** Control for HTML/print *************** -->
<!-- Set to either "IGNORE" (for HTML) or "INCLUDE" (for print) -->
<!ENTITY % SET-FOR-PRINT "IGNORE">
<!ENTITY % PRIVATE-ONLY "IGNORE">
<!-- *************** Settings for Book ID string *************** -->
<!ENTITY BOOKDATE "2003-06-11-T16:00" -- Date the document was produced -->
<!ENTITY SHORT-TITLE "APLAWS Deployment Guide" -- Short title for this manual -->
<!ENTITY PRODVER "5.2" -- Product version for this manual -->
<!-- *************** Bring in RH-standard entities *************** -->
<!ENTITY % RH-ENTITIES SYSTEM "./rh-sgml/rh-entities.sgml">
%RH-ENTITIES;
<!-- *************** Bring in RHEA specific entities *************** -->
<!ENTITY % RHEA-ENTITIES SYSTEM "./rh-sgml/rhea-entities.sgml">
%RHEA-ENTITIES;
<!-- *************** Set this particular PRODVER *************** -->
<!ENTITY PRODVER "&RHWAFVER;" -- Product version for this manual -->
<!-- *************** Chapter entities... *************** -->
<!ENTITY create-new-project SYSTEM "create-new-project.sgml">
<!ENTITY development-environment SYSTEM "development-environment.sgml">
<!ENTITY building-packages SYSTEM "building-packages.sgml">
<!ENTITY installing-aplaws SYSTEM "installing-aplaws.sgml">
<!ENTITY application-development SYSTEM "application-development.sgml">
]>
<book id="index" lang="en">
<bookinfo>
<title>APLAWS</title>
<subtitle>&SHORT-TITLE;</subtitle>
<!--
<isbn>
N/A
</isbn>
-->
<mediaobject>
<imageobject>
<imagedata fileref="./figs/rhl-common/rhlogo-chapter-title.eps"
format="eps" align="left">
</imageobject>
<imageobject>
<imagedata fileref="./figs/rhl-common/rhlogo-chapter-title.png"
format="png" align="left">
</imageobject>
</mediaobject>
<publisher>
<publishername>
<inlinemediaobject>
<imageobject>
<imagedata fileref="./figs/rhl-common/rhlogo-title.eps"
format="eps">
</imageobject>
<imageobject>
<imagedata fileref="./figs/rhl-common/rhlogo-title.png"
format="png">
</imageobject>
</inlinemediaobject>
</publishername>
</publisher>
<copyright>
<year>2003</year>
<holder>&FORMAL-RHI;</holder>
</copyright>
&BOILERPLATE;
</bookinfo>
<toc>
<title>Table of Contents</title>
</toc>
<!-- The chapters start here... -->
&create-new-project;
&development-environment;
&application-development;
&building-packages;
&installing-aplaws;
</book>

View File

@ -0,0 +1,51 @@
#! /bin/sh
# Make sure we have an absolute path to the backend and stylesheet, as
# jw doesn't like relative paths...
STUFFPATH=`dirname $0`
if [ -n "${STUFFPATH##/*}" ]
then
STUFFPATH=$PWD/$STUFFPATH
fi
# Figure out what our output directory should be called. Note that we
# also check to see if the user explicitly specified an output directory,
# in which case we'll use their choice...
O_OPTION=0
for i in "$@"
do
if [ $O_OPTION = "1" ]
then
OUTPUTDIR=$i
O_OPTION=0
fi
if [ $i = "-o" ]
then
O_OPTION=1
fi
done
# See if the user specified an output directory...
if [ -z $OUTPUTDIR ]
then
# Nope -- default to the name of the SGML file...
OUTPUTDIR="`echo $i | sed 's,\.sgml$,,;s,\.sgm$,,'`"
fi
# Nuke the output directory (if it exists); jw will create it for us...
if [ -d $OUTPUTDIR ]
then
echo -n "Cleaning out $OUTPUTDIR..."
rm -rf $OUTPUTDIR
echo "Done!"
fi
jw -f docbook \
-b $STUFFPATH/31-indexed-html \
-d $STUFFPATH/stylesheets/docbook31/redhat.dsl#html \
-o $OUTPUTDIR \
$*

View File

@ -0,0 +1,68 @@
# Based on original from Eric Bischoff <eric@caldera.de>
# Create an HTML document with index and figures in place.
# This is done by:
# 1. Converting from SGML to HTML
# 2. Generating an SGML index based on the HTML
# 3. Converting from SGML to HTML (taking into account the index this time)
# 4. Copying figures from original source tree into the output directory
# The end result is a directory tree ready for publishing/packaging/whatever...
# Point to the CSS and standard admon graphics. Note that these paths use
# the "dsssl-stylesheets" symlink to point to the latest dsssl stuff...
FINAL_INDEX=generated-index.sgml
#ADMON_GRAPHICS=/usr/share/sgml/docbook/dsssl-stylesheets/images/*.gif
ADMON_GRAPHICS=../rh-sgml/stylesheet-images/*.gif
INDEXFILE=INDEX$$
# Convert to HTML, generating the HTML.index file that we'll use to
# create an SGML index...
echo Running $SGML_JADE...
$SGML_JADE -t sgml -V html-index $SGML_ARGUMENTS
# Generate the index, fixing up the problem of bogus empty closing tags (</>)...
echo Indexing...
perl /usr/bin/collateindex.pl -g -i generated-index -o ../$FINAL_INDEX HTML.index
# Not sure if these are still needed; when we first tried collateindex;
# it threw "</>" in the generated index in certain cases...
cat ../$FINAL_INDEX | sed 's,^[ ]*</>[ ]*$,,' > ../$INDEXFILE
mv -f ../$INDEXFILE ../$FINAL_INDEX
# Nuke the HTML.index file; we don't need it anymore...
rm -f HTML.index
echo Rerunning $SGML_JADE...
$SGML_JADE -t sgml $SGML_ARGUMENTS
echo -n "Copying admon graphics..."
mkdir ./stylesheet-images
cp ${ADMON_GRAPHICS} ./stylesheet-images/
echo "Done!"
if [ -d ../figs/ ]
then
echo -n "Moving figures..."
(cd ../ ; tar chf - figs/) | (tar xf -)
echo "Done!"
echo -n "Cleaning CVS..."
find ./figs/ -type d -name "CVS"|xargs rm -rf
echo -n "EPS..."
find ./figs/ -type f -name "*eps"|xargs rm -f
echo -n " .xvpics..."
find ./figs/ -type d -name ".xvpics"|xargs rm -rf
echo -n "directories..."
find ./figs/ -type d -empty|xargs rm -rf
echo "Done!"
fi
#
exit 0

View File

@ -0,0 +1,80 @@
#Makefile for Red Hat Documentation
#Created by Tammy Fox <tfox@redhat.com>
#Copyright Red Hat Inc. 2001
include Makefile.local
TOP = $(shell pwd)
PRINTENTITY = SET-FOR-PRINT
LANG = en
SGMLFILE = $(DOCNAME).sgml
HTMLSCRIPT = db2indexed-html
VERSION = $(shell awk '/Version:/ { print $$2 }' $(DOCNAME).spec)
RELEASE = $(shell awk '/Release:/ { print $$2 }' $(DOCNAME).spec)
get-ext = $(subst .,,$(suffix $(1)))
SPLITTER = java -cp ../docs-stuff/classes/ com.redhat.ccm.documentation.Splitter
sedexpr = -e 's/^\(<!ENTITY \+% \+$2 \+"\)\(INCLUDE\|IGNORE\)\(">\)/\1$1\3/'
incl = $(call sedexpr,INCLUDE,$1)
ignore = $(call sedexpr,IGNORE,$1)
inclsedcmd = sed $(call incl,$1) $2
ignoresedcmd = sed $(call ignore,$1) $2
all: sgml html ps pdf rpm
sgml:
ifdef SPLITTERDIRS
$(SPLITTER) build $(shell find $(SPLITTERDIRS) -type f -not -name "*~" -not -name "\#*")
find build/ -type f -exec ln -sf {} \;
endif
html: sgml
$(call ignoresedcmd,$(PRINTENTITY),$(SGMLFILE)) > $(DOCNAME)-temp.sgml
$(HTMLSCRIPT) --output $(DOCNAME) $(DOCNAME)-temp.sgml
@rm $(DOCNAME)-temp.sgml
@rm -rf $(DOCNAME)-$(VERSION)
@mv $(DOCNAME) $(DOCNAME)-$(VERSION)
ps pdf: sgml $(SGMLFILE)
@rm -f $(DOCNAME).$@
$(MAKE) $(addsuffix .$@,$(basename $(SGMLFILE)))
%.ps %.pdf:
$(call inclsedcmd,$(PRINTENTITY),$(SGMLFILE)) > $(DOCNAME)-temp.sgml
db2indexed-$(call get-ext,$@) $(notdir $(DOCNAME)-temp.sgml)
@rm $(DOCNAME)-temp.sgml
@mv $(DOCNAME)-temp.$(call get-ext,$@) $(DOCNAME)-$(VERSION)-$(RELEASE).$(call get-ext,$@)
tarball: html
@cp -f ../docs-stuff/icon/docs.png $(DOCNAME)-$(VERSION)
@tar cvjf $(DOCNAME)-$(VERSION).tbz $(DOCNAME)-$(VERSION)/*
@echo "The archive is in $(DOCNAME)-$(VERSION).tbz"
zip: html
@cp -f ../docs-stuff/icon/docs.png $(DOCNAME)-$(VERSION)
@zip -r $(DOCNAME)-$(VERSION).zip $(DOCNAME)-$(VERSION)/*
@echo "The archive is in $(DOCNAME)-$(VERSION).zip"
srpm: tarball
@rpmbuild -ts $(DOCNAME)-$(VERSION).tbz
@echo "SRPM created"
rpm: tarball
@rpmbuild -bb --define "_sourcedir `pwd`" $(DOCNAME).spec
@echo "RPM created"
clean:
@rm -rfv *.ps *.pdf *.tex *.out *.log html $(DOCNAME) $(DOCNAME)-$(VERSION) $(DOCNAME).junk *.tbz generated-index.sgml build
find . -maxdepth 1 -lname "build/*" -exec rm {} \;
zipclean: clean
@rm -f *.zip
splitter: classes/com/redhat/ccm/documentation/Splitter.class
classes/com/redhat/ccm/documentation/Splitter.class: src/com/redhat/ccm/documentation/Splitter.java
@mkdir -p classes
javac -d classes src/com/redhat/ccm/documentation/Splitter.java

View File

@ -0,0 +1 @@
#empty

View File

@ -0,0 +1,127 @@
#! /bin/sh
RH_STYLESHEET=`dirname $0`/stylesheets/RHL7/redhat-html.dsl
HTML_STYLESHEET=/usr/lib/sgml/stylesheets/nwalsh-modular/test/docbook.css
ADMON_GRAPHICS=/usr/lib/sgml/stylesheets/nwalsh-modular/images/*.gif
FINAL_INDEX=generated-index.sgml
output=db2html-dir
TMPDIR=DBTOHTML_OUTPUT_DIR$$
INDEXFILE=INDEX$$
TMPSTYLE=`dirname $0`/stylesheets/STYLE$$
HTM_EXTENSIONS=0
# Process any options...
while getopts ":3" opt; do
case $opt in
3 ) HTM_EXTENSIONS=1 ;;
\? ) echo "Usage: `basename $0` [options] [filename.sgml]" >&2
echo "Options:" >&2
echo " -3 -- create HTML output with .htm file extensions" >&2
exit 1 ;;
esac
done
shift $(($OPTIND - 1))
if [ $# -gt 2 ] || [ $# -lt 1 ]
then
echo "Usage: `basename $0` [options] [filename.sgml]" >&2
echo "Options:" >&2
echo " -3 -- create HTML output with .htm file extensions" >&2
exit 1
fi
if [ $# -eq 1 ]
then
if [ ! -r $1 ]
then
echo Cannot read \"$1\". Exiting. >&2
exit 1
fi
if echo $1 | egrep -i '\.sgml$|\.sgm$' >/dev/null 2>&1
then
# now make sure that the output directory is always a subdirectory
# of the current directory
input_file=`basename $1`
output="`echo $input_file | sed 's,\.sgml$,,;s,\.sgm$,,'`"
fi
fi
if [ $HTM_EXTENSIONS -eq 1 ]
then
# We need to take the normal stylesheet, and hack a temporary version to use...
cat $RH_STYLESHEET | sed 's/^[ ]*"\.html"[ ]*)[ ]*$/ ".htm")/' > $TMPSTYLE
# Point to the new temporary stylesheet...
RH_STYLESHEET=$TMPSTYLE
fi
mkdir $TMPDIR
SAVE_PWD=`pwd`
if [ $1 = `basename $1` ]; then
echo Running jade...
RH_STYLESHEET="`echo $RH_STYLESHEET | sed 's,^\([^/]\),\.\./\1,'`"
(cd $TMPDIR; jade -t sgml -ihtml -d ${RH_STYLESHEET} -V html-index ../$1; cd $SAVE_PWD)
# Generate the index, fixing up the problem of bogus empty closing tags (</>)...
for index_script in /usr/bin/collateindex.pl /usr/lib/sgml/stylesheets/nwalsh-modular/bin/collateindex.pl
do
if [ -f $index_script ]; then
echo Indexing...
perl $index_script -g -o $FINAL_INDEX $TMPDIR/HTML.index
fi
done
# Not sure if these are still needed; when we first tried collateindex, it threw "</>"
# in the generated index in certain cases...
cat $FINAL_INDEX | sed 's,^[ ]*</>[ ]*$,,' > $INDEXFILE
mv -f $INDEXFILE $FINAL_INDEX
# We should now have a good index; clean up and rerun...
echo Rerunning jade...
rm -rf $TMPDIR
mkdir $TMPDIR
(cd $TMPDIR; jade -t sgml -ihtml -d ${RH_STYLESHEET} ../$1; cd $SAVE_PWD)
else
# Yeah, I know it's ugly, but...
echo Rerun this script from the directory containing your SGML... >&2
exit 1
fi
if [ -d ${output}.junk ]
then
/bin/rm -rf ${output}.junk
fi
if [ -d ${output} ]
then
mv $output ${output}.junk
fi
echo "Copying cascading stylesheet and admon graphics..."
cp ${HTML_STYLESHEET} ${TMPDIR}/
mkdir ${TMPDIR}/stylesheet-images
cp ${ADMON_GRAPHICS} ${TMPDIR}/stylesheet-images
echo Moving figures and cleaning up random stuff...
if [ -d figs/ ]
then
tar cf - figs/ | (cd $TMPDIR; tar xf -)
find $TMPDIR/figs/ -type d -name "CVS"|xargs rm -rf
find $TMPDIR/figs/ -type f -name "*eps"|xargs rm -f
find $TMPDIR/figs/ -type d -name ".xvpics"|xargs rm -rf
find $TMPDIR/figs/ -type d -empty|xargs rm -rf
fi
rm -f $TMPSTYLE
mv ${TMPDIR} $output
rm -rf $TMPDIR
exit 0

View File

@ -0,0 +1,59 @@
#!/usr/bin/python
## script to add css to RHL HTML pages
## Copyright (C) 2002 Red Hat, Inc.
## Copyright (C) 2002 Tammy Fox <tfox@redhat.com>
## Author: Tammy Fox
import sys
import string
import os
import re
import tempfile
#grab files specified on command line
html_files = sys.argv[1:]
for file in html_files:
## add header
#open file
f = open(file, "rw")
#read in contents of file
content = f.read()
#reg expression to find BODY tag
replace_this = re.search('</HEAD', content, re.DOTALL | re.IGNORECASE)
css_line="</HEAD><link rel=\"stylesheet\" type=\"text/css\" href=\"rhdocs-man.css\""
path = os.getcwd()
#open temp file
try:
tempfile.tempdir = path
tmpfilename = tempfile.mktemp()
tmpfile = open(tmpfilename, 'w')
os.chmod(tmpfilename, 0664)
except IOError:
print "Error: Can't create temp file"
sys.exit(0)
try:
new_content = re.sub(replace_this.group(), css_line, content)
except:
print "Error: Can't find content to replace in header in " + file
tmpfile.close()
os.remove(tmpfilename)
sys.exit(0)
tmpfile.write(new_content)
#close files
f.close()
tmpfile.close()
#mv temp file to real file
os.rename(tmpfilename, file)

View File

@ -0,0 +1,400 @@
/*
CSS stylesheet for the HTML versions of Red Hat Documentation
Created by Tammy Fox <tfox@redhat.com>
*/
body {
background-color: #ffffff;
color: #000000;
margin: 0;
padding: 0;
font-family: helvetica, arial,sans-serif;
font-size: 12pt;
/* needed so buttons created with css don't bleed into text */
line-height: 1.3;
}
body.book, body.article, body.chapter, body.part, body.preface, body.sect1, body.index, body.colophon, body.glossary, body.reference, body.refentry {
font-family: helvetica, arial,sans-serif;
font-size: 12pt;
background-color: #ffffff;
margin: 0;
padding : 0;
}
p, td, th, .variablelist {
font-family: helvetica, arial, sans-serif;
font-size: 12pt;
/* left must be 0 so it lines up */
margin : 10px 0px 10px 0px;
}
div.article p {
font-family: helvetica, arial, sans-serif;
font-size: 12pt;
/* if in article made from XML left must be 10 so it lines up */
margin : 10px 10px 10px 10px;
}
li {
font-family: helvetica, arial, sans-serif;
font-size: 12pt;
}
table {
width: 90%;
font-family: helvetica, arial, sans-serif;
font-size: 12pt;
margin : 0px 0px 0px 0px;
}
table.note, table.tip, table.important, table.caution, table.warning {
width: 95%;
font-family: helvetica, arial, sans-serif;
font-size: 12pt;
border: 2px solid #B0C4DE;
background-color: #F0F8FF;
color: #000000;
/* padding inside table area */
padding: 0.5em;
margin-bottom: 0.5em;
margin-top: 0.5em;
}
/* set width smaller is IE is happy */
ul table.note, ul table.tip, ul table.important, ul table.caution, ul table.warning, ol table.note, ol table.t\ip, ol table.important, ol table.caution, ol table.warning {
width: 95%;
}
.computeroutput, .command {
font-family: courier, courier new, monospace;
font-size: 12pt;
}
.userinput {
font-family: courier, courier new, monospace;
font-size: 12pt;
font-weight: bold;
}
table.screen {
width: 95%;
font-family: courier, courier new, monospace;
font-size: 12pt;
border: 2px solid #A9A9A9;
background-color: #DCDCDC;
color: #000000;
padding: 0.5em;
margin-bottom: 0.5em;
margin-top: 0.5em;
}
table.calstable {
width: 95%;
font-family: helvetica, arial, sans-serif;
font-size: 12pt;
background-color: #DCDCDC;
color: #000000;
}
table.calstable td {
font-family: helvetica, arial, sans-serif;
font-size: 12pt;
border: 1px solid #A9A9A9;
background-color: #DCDCDC;
color: #000000;
padding: 0.5em;
margin-bottom: 0.5em;
margin-top: 2px;
margin : 0px 0px 0px 10px;
}
table.calstable th {
border: 2px solid #A9A9A9;
background-color: #A9A9A9;
color: #000000;
}
.navheader, .navfooter {
background-color: #ffffff;
color: #000000;
/* need top margin so title line isn't touching the top */
margin : 10px 20px 0px 20px;
font-family: helvetica, arial,sans-serif;
font-size: 12pt;
}
div.navheader hr, div.navfooter hr {
background-color: #CCCCCC;
margin: 0px 0px 0px 0px;
height: 1px;
border-style: none;
}
div.navheader table, div.navfooter table {
width: 95%;
background-color: #ffffff;
margin: 0px 0px 0px 0px;
padding: 0;
font-family: helvetica, arial,sans-serif;
font-size: 12pt;
}
body>div.navheader table, body>div.navfooter table {
/* Hidden from IE */
width: 100%;
}
/* top hr on index page is not in a div so it needs div margins */
hr {
background-color: #CCCCCC;
margin: 0px 10px 0px 10px;
height: 1px;
border-style: none;
}
h2, h2.indexdiv {
font-family: helvetica, arial, sans-serif;
font-size: 12pt;
font-weight: bold;
color: #990000;
}
h3
{
font-family: helvetica, arial, sans-serif;
font-size: 12pt;
font-weight: bold;
line-height: 1.4em;
color: #990000;
}
h4
{
font-family: helvetica, arial, sans-serif;
font-size: 12pt;
font-weight: bold;
color: #990000;
}
h5
{
font-family: helvetica, arial, sans-serif;
font-size: 12pt;
font-weight: bold;
color: #990000;
}
h6 {
font-family: helvetica, arial, sans-serif;
font-size: 12pt;
font-weight: bold;
color: #666666;
}
a:link {
color: #000066;
}
a:visited
{
color: #333399;
}
/* not in a div, so need standard left margin */
.footnotes {
width: 95%;
margin : 10px 20px 10px 20px;
font-size: 12pt;
}
div.preface, div.colophon, div.chapter, div.appendix, div.index, div.partintro, div.legalnotice, div.glossary, div.refnamediv, div.refsect1 {
margin : 0px 20px 0px 20px;
font-family: helvetica, arial, sans-serif;
}
/* A, B, etc. in Index */
div.indexdiv {
font-family: helvetica, arial, sans-serif;
}
div.titlepage {
margin : 0px 10px 0px 10px;
font-family: helvetica, arial, sans-serif;
}
/* div.sect1 for an article doesn't have the extra padding from a div.chapter */
div.article div.sect1 {
margin : 0px 10px 0px 10px;
font-family: helvetica, arial, sans-serif;
}
/* div.sect1 on same page as div.chapter, etc. with margins and padding already */
div.chapter div.sect1, div.preface div.sect1, div.appendix div.sect1, div.colophon div.sect1 {
margin : 0px 0px 0px 0px;
font-family: helvetica, arial, sans-serif;
padding: 0;
}
/* on separate page without div.chapter, so need same padding */
div.sect1 {
margin : 0px 20px 0px 20px;
font-family: helvetica, arial, sans-serif;
}
/* same as dev.sect1 except no padding because div.sect1 doesn't end before div.sect2, etc.*/
div.sect2, div.sect3, div.sect4 {
margin : 0px 0px 0px 0px;
font-family: helvetica, arial, sans-serif;
padding: 0;
}
/* chapter, preface, and colophon titles don't have a class */
h1 {
margin : 0px 0px 0px 0px;
font-family: helvetica, arial, sans-serif;
font-size: 18pt;
font-weight: bold;
color: #990000;
}
h1.sect1, h2.sect1 {
/* already in div.sect1, so no margins */
margin : 0px 0px 0px 0px;
font-family: helvetica, arial, sans-serif;
font-size: 18pt;
font-weight: bold;
color: #990000;
}
h2.sect2, h2.title {
/* already in div.sect1, so no margins */
margin : 0px 0px 0px 0px;
font-family: helvetica, arial, sans-serif;
font-size: 16pt;
font-weight: bold;
color: #990000;
}
h3.sect3, h3.title {
/* already in div.sect1, so no margins */
margin : 0px 0px 0px 0px;
font-family: helvetica, arial, sans-serif;
font-size: 14pt;
font-weight: bold;
color: #990000;
}
h4.sect4, h5.sect5, h6.sect6 {
/* already in div.sect1, so no margins */
margin : 0px 0px 0px 0px;
font-family: helvetica, arial, sans-serif;
font-size: 12pt;
font-weight: bold;
color: #990000;
}
/* book and article titles on index.html page and part title pages */
h1.title {
font-family: helvetica, arial, sans-serif;
font-size: 22pt;
font-weight: bold;
color: #990000;
margin : 10px 10px 10px 10px;
/* add padding so title is not touching top margin */
padding: 10 0 0;
}
body.refentry h1 {
margin: 0 0 0 20px;
}
div.glossary h1 {
font-family: helvetica, arial, sans-serif;
font-size: 22pt;
font-weight: bold;
color: #990000;
margin : 10px 10px 10px 0px;
/* add padding so title is not touching top margin */
padding: 10 0 0;
}
.subtitle {
font-family: helvetica, arial, sans-serif;
font-size: 18pt;
color:#666666;
font-weight: bold;
margin : 10px 10px 10px 10px;
padding: 0;
}
b.othername {
font-family: helvetica, arial, sans-serif;
font-size: 18pt;
color:#666666;
font-weight: bold;
margin : 10px 10px 10px 10px;
padding: 0;
}
.copyright, .affiliation {
font-family: helvetica, arial, sans-serif;
font-size: 12pt;
color:#666666;
margin : 10px 10px 10px 10px;
padding: 0;
}
isbn.isbn {
font-family: helvetica, arial, sans-serif;
font-size: 12pt;
color:#666666;
margin : 10px 10px 10px 10px;
padding: 0;
}
.toc {
font-family: helvetica, arial, sans-serif;
font-size: 12pt;
padding: 0;
margin : 10px 20px 10px 20px;
}
.citetitle {
font-family: helvetica, arial, sans-serif;
font-size: 12pt;
color:#666666;
font-weight: bold;
}
div.qandaset big {
font-family: helvetica, arial, sans-serif;
font-size: 12pt;
color: #990000;
}
.author {
font-family: helvetica, arial, sans-serif;
font-size: 12pt;
color:#990000;
font-weight: bold;
margin : 10px;
line-height: 1.4em;
}
/* make guibuttons look like real buttons */
.guibutton {
color: #000000;
font-family: helvetica, arial, sans-serif;
background-color: #DCDCDC;
padding: 1px 3px;
font-size: 10pt;
border: outset 2px;
text-decoration: none;
}

View File

@ -0,0 +1,51 @@
#! /bin/sh
# Make sure we have an absolute path to the backend and stylesheet, as
# jw doesn't like relative paths...
STUFFPATH=`dirname $0`
if [ -n "${STUFFPATH##/*}" ]
then
STUFFPATH=$PWD/$STUFFPATH
fi
# Figure out what our output directory should be called. Note that we
# also check to see if the user explicitly specified an output directory,
# in which case we'll use their choice...
O_OPTION=0
for i in "$@"
do
if [ $O_OPTION = "1" ]
then
OUTPUTDIR=$i
O_OPTION=0
fi
if [ $i = "-o" ]
then
O_OPTION=1
fi
done
# See if the user specified an output directory...
if [ -z $OUTPUTDIR ]
then
# Nope -- default to the name of the SGML file...
OUTPUTDIR="`echo $i | sed 's,\.sgml$,,;s,\.sgm$,,'`"
fi
# Nuke the output directory (if it exists); jw will create it for us...
if [ -d $OUTPUTDIR ]
then
echo -n "Cleaning out $OUTPUTDIR..."
rm -rf $OUTPUTDIR
echo "Done!"
fi
jw -f docbook \
-b $STUFFPATH/indexed-html \
-d $STUFFPATH/stylesheets/redhat.dsl#html \
-o $OUTPUTDIR \
$*

View File

@ -0,0 +1,54 @@
#! /bin/sh
# Make sure we have an absolute path to the backend and stylesheet, as
# jw doesn't like relative paths...
STUFFPATH=`dirname $0`
if [ -n "${STUFFPATH##/*}" ]
then
STUFFPATH=$PWD/$STUFFPATH
fi
#
#Grab name of the SGML file without extension
#
O_OPTION=0
for i in "$@"
do
if [ $O_OPTION = "1" ]
then
FILENAME=$i
O_OPTION=0
fi
if [ $i = "-o" ]
then
O_OPTION=1
fi
done
if [ -z $FILENAME ]
then
# Grab name of the SGML file...
FILENAME="`echo $i | sed 's,\.sgml$,,;s,\.sgm$,,'`"
fi
# Generate index
jw -f docbook \
-b $STUFFPATH/index \
-d $STUFFPATH/stylesheets/redhat.dsl#html \
-o $FILENAME-tmp \
$*
# Generate PDF with generated index
jw -f docbook \
-b $STUFFPATH/indexed-pdf \
-d $STUFFPATH/stylesheets/redhat.dsl#print \
$*
# Remove temp directory
echo -n Removing temp directory $PWD/$FILENAME-tmp...
rm -rf $PWD/$FILENAME-tmp
echo Done!

View File

@ -0,0 +1,54 @@
#! /bin/sh
# Make sure we have an absolute path to the backend and stylesheet, as
# jw doesn't like relative paths...
STUFFPATH=`dirname $0`
if [ -n "${STUFFPATH##/*}" ]
then
STUFFPATH=$PWD/$STUFFPATH
fi
#
#Grab name of the SGML file without extension
#
O_OPTION=0
for i in "$@"
do
if [ $O_OPTION = "1" ]
then
FILENAME=$i
O_OPTION=0
fi
if [ $i = "-o" ]
then
O_OPTION=1
fi
done
if [ -z $FILENAME ]
then
# Grab name of the SGML file...
FILENAME="`echo $i | sed 's,\.sgml$,,;s,\.sgm$,,'`"
fi
# Generate index
jw -f docbook \
-b $STUFFPATH/index \
-d $STUFFPATH/stylesheets/redhat.dsl#html \
-o $FILENAME-tmp \
$*
# Generate PDF with generated index
jw -f docbook \
-b $STUFFPATH/indexed-pdfprint \
-d $STUFFPATH/stylesheets/redhat.dsl#print \
$*
# Remove temp directory
echo -n Removing temp directory $PWD/$FILENAME-tmp...
rm -rf $PWD/$FILENAME-tmp
echo Done!

View File

@ -0,0 +1,54 @@
#! /bin/sh
# Make sure we have an absolute path to the backend and stylesheet, as
# jw doesn't like relative paths...
STUFFPATH=`dirname $0`
if [ -n "${STUFFPATH##/*}" ]
then
STUFFPATH=$PWD/$STUFFPATH
fi
#
#Grab name of the SGML file without extension
#
O_OPTION=0
for i in "$@"
do
if [ $O_OPTION = "1" ]
then
FILENAME=$i
O_OPTION=0
fi
if [ $i = "-o" ]
then
O_OPTION=1
fi
done
if [ -z $FILENAME ]
then
# Grab name of the SGML file...
FILENAME="`echo $i | sed 's,\.sgml$,,;s,\.sgm$,,'`"
fi
# Generate index
jw -f docbook \
-b $STUFFPATH/index \
-d $STUFFPATH/stylesheets/redhat.dsl#html \
-o $FILENAME-tmp \
$*
# Generate PS with generated index
jw -f docbook \
-b $STUFFPATH/indexed-ps \
-d $STUFFPATH/stylesheets/redhat.dsl#print \
$*
# Remove temp directory
echo -n Removing temp directory $PWD/$FILENAME-tmp...
rm -rf $PWD/$FILENAME-tmp
echo Done!

View File

@ -0,0 +1,54 @@
#! /bin/sh
# Make sure we have an absolute path to the backend and stylesheet, as
# jw doesn't like relative paths...
STUFFPATH=`dirname $0`
if [ -n "${STUFFPATH##/*}" ]
then
STUFFPATH=$PWD/$STUFFPATH
fi
#
#Grab name of the SGML file without extension
#
O_OPTION=0
for i in "$@"
do
if [ $O_OPTION = "1" ]
then
FILENAME=$i
O_OPTION=0
fi
if [ $i = "-o" ]
then
O_OPTION=1
fi
done
if [ -z $FILENAME ]
then
# Grab name of the SGML file...
FILENAME="`echo $i | sed 's,\.sgml$,,;s,\.sgm$,,'`"
fi
# Generate index
jw -f docbook \
-b $STUFFPATH/index \
-d $STUFFPATH/stylesheets/redhat-training.dsl#html \
-o $FILENAME-tmp \
$*
# Generate PDF with generated index
jw -f docbook \
-b $STUFFPATH/indexed-training-pdf \
-d $STUFFPATH/stylesheets/redhat-training.dsl#print \
$*
# Remove temp directory
echo -n Removing temp directory $PWD/$FILENAME-tmp...
rm -rf $PWD/$FILENAME-tmp
echo Done!

View File

@ -0,0 +1,54 @@
#! /bin/sh
# Make sure we have an absolute path to the backend and stylesheet, as
# jw doesn't like relative paths...
STUFFPATH=`dirname $0`
if [ -n "${STUFFPATH##/*}" ]
then
STUFFPATH=$PWD/$STUFFPATH
fi
#
#Grab name of the SGML file without extension
#
O_OPTION=0
for i in "$@"
do
if [ $O_OPTION = "1" ]
then
FILENAME=$i
O_OPTION=0
fi
if [ $i = "-o" ]
then
O_OPTION=1
fi
done
if [ -z $FILENAME ]
then
# Grab name of the SGML file...
FILENAME="`echo $i | sed 's,\.sgml$,,;s,\.sgm$,,'`"
fi
# Generate index
jw -f docbook \
-b $STUFFPATH/index \
-d $STUFFPATH/stylesheets/redhat-training.dsl#html \
-o $FILENAME-tmp \
$*
# Generate PS with generated index
jw -f docbook \
-b $STUFFPATH/indexed-training-ps \
-d $STUFFPATH/stylesheets/redhat-training.dsl#print \
$*
# Remove temp directory
echo -n Removing temp directory $PWD/$FILENAME-tmp...
rm -rf $PWD/$FILENAME-tmp
echo Done!

View File

@ -0,0 +1,46 @@
#! /bin/sh
# Make sure we have an absolute path to the backend and stylesheet, as
# jw doesn't like relative paths...
STUFFPATH=`dirname $0`
if [ -n "${STUFFPATH##/*}" ]
then
STUFFPATH=$PWD/$STUFFPATH
fi
DVI_PAGES=$1
FILENAME=$2
export DVI_PAGES
if [ "$1" == "" ] || [ "$2" == "" ] ; then
echo "Usage: $0 <page-nums> <parent-file>"
echo "example: $0 42-50 rhl-cg-en.sgml"
exit 1
fi
#
#Grab name of the SGML file without extension
#
FILENAME="`echo $FILENAME | sed 's,\.sgml$,,;s,\.sgm$,,'`"
# Generate index
jw -f docbook \
-b $STUFFPATH/index \
-d $STUFFPATH/stylesheets/redhat.dsl#html \
-o $FILENAME-tmp \
${FILENAME}.sgml
# Generate PDF with generated index
jw -f docbook \
-b $STUFFPATH/indexedpg-pdf \
-d $STUFFPATH/stylesheets/redhat.dsl#print \
${FILENAME}.sgml
# Remove temp directory
echo -n Removing temp directory $PWD/$FILENAME-tmp...
rm -rf $PWD/$FILENAME-tmp
echo Done!

View File

@ -0,0 +1,49 @@
#! /bin/sh
# Modified for a specified list of pages by Tammy Fox <tfox@redhat.com>
# Make sure we have an absolute path to the backend and stylesheet, as
# jw doesn't like relative paths...
STUFFPATH=`dirname $0`
if [ -n "${STUFFPATH##/*}" ]
then
STUFFPATH=$PWD/$STUFFPATH
fi
DVI_PAGES=$1
FILENAME=$2
export DVI_PAGES
if [ "$1" == "" ] || [ "$2" == "" ] ; then
echo "Usage: $0 <page-nums> <parent-file>"
echo "example: $0 42-50 rhl-cg-en.sgml"
exit 1
fi
#
#Grab name of the SGML file without extension
#
FILENAME="`echo $FILENAME | sed 's,\.sgml$,,;s,\.sgm$,,'`"
# Generate index
jw -f docbook \
-b $STUFFPATH/index \
-d $STUFFPATH/stylesheets/redhat.dsl#html \
-o $FILENAME-tmp \
${FILENAME}.sgml
# Generate PS with generated index
jw -f docbook \
-b $STUFFPATH/indexedpg-ps \
-d $STUFFPATH/stylesheets/redhat.dsl#print \
${FILENAME}.sgml
# Remove temp directory
echo -n Removing temp directory $PWD/$FILENAME-tmp...
rm -rf $PWD/$FILENAME-tmp
echo Done!

View File

@ -0,0 +1,16 @@
#! /bin/sh
# Make sure we have an absolute path to the backend and stylesheet, as
# jw doesn't like relative paths...
STUFFPATH=`dirname $0`
if [ -n "${STUFFPATH##/*}" ]
then
STUFFPATH=$PWD/$STUFFPATH
fi
jw -f docbook \
-b html \
-d $STUFFPATH/stylesheets/redhat-nochunks.dsl#html \
--nochunks \
$*

View File

@ -0,0 +1,18 @@
You can modify the background color, foreground color, font used, window size, and more by editing the .Xresources file in your home directory. If this file does not exist, you will need to create it.
Also note that you must type the command
xrdb -merge .Xresources
from your home directory to have X reread this configuration file, and you must restart Emacs before the changes will take effect.
Sample .Xresources file:
emacs.background: Wheat
emacs.f oreground: Black
emacs.pointerColor: Blue
emacs.cursorColor: Red
emacs.bitmapIcon: on
emacs.font: fixed
emacs.geometry: 100x45

View File

@ -0,0 +1,130 @@
This is a copy of Dave Mason's .emacs file. Add the following to your
own:
----------------------begin cut-------------------------
;;
;;MODES
;;
(setq auto-mode-alist (cons '("\\.sgml$" . sgml-mode) auto-mode-alist))
;;(setq auto-mode-alist (cons '("\\.sgm$" . sgml-mode) auto-mode-alist))
;;turn on html-helper-mode
;;don't really need this with psgml, i think
(autoload 'html-helper-mode "html-helper-mode" "Yay HTML" t)
(setq auto-mode-alist (cons '("\\.html$" . html-helper-mode)
auto-mode-alist))
;; turn on auto-fill in `text-mode' and derived modes
;;(mail, news, etc)
(add-hook 'text-mode-hook 'turn-on-auto-fill)
;;
;;SGML!!
;;
;;#############################################################
;;
;;PSGML mode stuff
;;
(autoload 'sgml-mode "psgml" "My Most Major Mode" t)
(setq sgml-mode-hook '(lambda () "Defaults for SGML mode." (turn-on-auto-fill) (setq fill-column 80)))
(defun My-SGML-keymap ()
(local-set-key [(alt i)]
'(lambda ()
(interactive)
(sgml-indent-line)
(sgml-insert-element 'item)
(sgml-indent-line)))
(local-set-key [(alt l)]
'(lambda ()
(interactive)
(sgml-insert-element 'list)
(sgml-insert-element 'item)
(sgml-indent-line)))
(local-set-key [(alt p)]
'(lambda ()
(interactive)
(sgml-indent-line)
(sgml-insert-element 'para)
(sgml-indent-line)))
(local-set-key [(alt -)]
'(lambda ()
(interactive)
(insert "&mdash;"))))
(add-hook 'sgml-mode-hook 'My-SGML-keymap)
;;
;; Fix up indentation of data...
;;
(setq-default sgml-indent-data t)
;;
;; SGML markup faces.
;;
(setq-default sgml-set-face t)
(make-face 'sgml-comment-face)
(make-face 'sgml-doctype-face)
(make-face 'sgml-end-tag-face)
(make-face 'sgml-entity-face)
(make-face 'sgml-ignored-face)
(make-face 'sgml-ms-end-face)
(make-face 'sgml-ms-start-face)
(make-face 'sgml-pi-face)
(make-face 'sgml-sgml-face)
(make-face 'sgml-short-ref-face)
(make-face 'sgml-start-tag-face)
(set-face-foreground 'sgml-comment-face "maroon")
(set-face-foreground 'sgml-doctype-face "dark green")
(set-face-foreground 'sgml-end-tag-face "blue2")
(set-face-foreground 'sgml-entity-face "red2")
(set-face-foreground 'sgml-ignored-face "maroon")
(set-face-background 'sgml-ignored-face "gray90")
(set-face-foreground 'sgml-ms-end-face "maroon")
(set-face-foreground 'sgml-ms-start-face "maroon")
(set-face-foreground 'sgml-pi-face "maroon")
(set-face-foreground 'sgml-sgml-face "maroon")
(set-face-foreground 'sgml-short-ref-face "goldenrod")
(set-face-foreground 'sgml-start-tag-face "blue2")
(setq-default sgml-markup-faces
'((comment . sgml-comment-face)
(doctype . sgml-doctype-face)
(end-tag . sgml-end-tag-face)
(entity . sgml-entity-face)
(ignored . sgml-ignored-face)
(ms-end . sgml-ms-end-face)
(ms-start . sgml-ms-start-face)
(pi . sgml-pi-face)
(sgml . sgml-sgml-face)
(short-ref . sgml-short-ref-face)
(start-tag . sgml-start-tag-face)))
(defun docbook-mode ()
(sgml-mode)
)
;;
;;END SGML STUFF
;;
;;##################################################################
(global-set-key [(f1)] (lambda () (interactive) (manual-
entry (current-word))))
---------------------end cut-------------------------------

View File

@ -0,0 +1,19 @@
Warning: This no longer works with the current version of RHL. Please refer to Xresources.txt.
In your .Xdefaults file, you'll find entries for the display
properties of Emacs. If you wish, you can substitute those entries
with the following, which will give you a larger Emacs window, and
change the default color of the background, cursor and pointer.
----------------begin cut-------------------------
emacs*Background: Wheat
emacs*Foreground: Black
emacs*pointerColor: Blue
emacs*cursorColor: Red
emacs*bitmapIcon: on
emacs*font: fixed
emacs.geometry: 100x45
---------------end cut---------------------------

View File

@ -0,0 +1,60 @@
#!/usr/bin/perl
#
#
# convert image to Encapsulated Postscript, with possible scaling of width
#
# Downloaded from http://people.redhat.com/dcm/
#
# Modified by tfox for Red Hat Documentation - default to width of 4
#
$width = "4";
if ($ARGV[0] =~ /^--width=(.+)$/) {
$width = $1;
shift (@ARGV);
}
#print "width =",$width,"\n";
#print "argv =",$ARGV[0],"\n";
$infile = $ARGV[0];
if (!(-e $infile)) {
print "File doesn't exist\n";
exit 1;
}
$imagesz = `identify $ARGV[0]`;
($name, $type, $size, $rest) = split / /, $imagesz, 4;
#print "split:", $name, " ", $type, " ", $size, " ", $rest, "\n";
#print "size = ",$size,"\n";
($x, $y) = split /x/, $size, 2;
($y, $rest) = split /\+/, $y, 2;
#print $x," by ",$y, "\n";
#
# if width set, we need to scale
#
if ($width != "") {
$scale = $width * (72.0/$x);
} else {
$scale = 1;
}
$scale = 72.0/$scale;
#print "scale = ",$scale,"\n";
$outfile = $infile;
$outfile =~ s/\.gif/\.png/;
print $infile," ",$outfile,"\n";
system("convert -type TrueColor $infile $outfile");

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -0,0 +1,63 @@
#!/usr/bin/perl
#
#
# convert image to Encapsulated Postscript, with possible scaling of width
#
# Example: img2eps --width=3 myfile.gif
# (width in inches)
#
$width = "";
if ($ARGV[0] =~ /^--width=(.+)$/) {
$width = $1;
shift (@ARGV);
}
#print "width =",$width,"\n";
#print "argv =",$ARGV[0],"\n";
$infile = $ARGV[0];
if (!(-e $infile)) {
print "File doesn't exist\n";
exit 1;
}
$imagesz = `identify $ARGV[0]`;
($name, $type, $size, $rest) = split / /, $imagesz, 4;
#print "split:", $name, " ", $type, " ", $size, " ", $rest, "\n";
#print "size = ",$size,"\n";
($x, $y) = split /x/, $size, 2;
($y, $rest) = split /\+/, $y, 2;
#print $x," by ",$y, "\n";
#
# if width set, we need to scale
#
if ($width != "") {
$scale = $width * (72.0/$x);
} else {
$scale = 1;
}
$scale = 72.0/$scale;
#print "scale = ",$scale,"\n";
$tmpfile = $infile;
$tmpfile =~ s/\.gif/\.ept/;
$outfile = $infile;
$outfile =~ s/\.gif/\.eps/;
#print $infile," ",$outfile,"\n";
system("convert $infile tmpimage.pgm");
#system("giftopnm $infile | ppmtopgm > tmpimage.pgm");
system("convert -density $scale tmpimage.pgm $tmpfile");
system("mv -f $tmpfile $outfile");
system("rm -f tmpimage.pgm");

View File

@ -0,0 +1,47 @@
# Based on original from Eric Bischoff <eric@caldera.de>
# Modified by Tammy Fox <tfox@redhat.com> for Red Hat Documentation
# Make sure we have an absolute path to the backend and stylesheet, as
# jw doesn't like relative paths...
STUFFPATH=`dirname $0`
if [ -n "${STUFFPATH##/*}" ]
then
STUFFPATH=$PWD/$STUFFPATH
fi
# Generate the index, fixing up the problem of bogus empty closing tags (</>)...
FINAL_INDEX=generated-index.sgml
INDEXFILE=INDEX$$
# Convert to HTML, generating the HTML.index file that we'll use to
# create an SGML index...
echo Running $SGML_JADE...
$SGML_JADE -t sgml -V html-index -i html -d $STUFFPATH/stylesheets/redhat.dsl#html ../${SGML_FILE_NAME}.sgml
# Generate the index, fixing up the problem of bogus empty closing tags (</>)...
echo Indexing...
if [ $LANG = "it_IT" ]; then
SYMBOL="-s Simboli"
elif [ $LANG = "es_ES" ]; then
SYMBOL="-s Símbolos"
else
SYMBOL=""
fi
perl /usr/bin/collateindex.pl -g $SYMBOL -i generated-index -o ../$FINAL_INDEX HTML.index
# Not sure if these are still needed; when we first tried collateindex;
# it threw "</>" in the generated index in certain cases...
cat ../$FINAL_INDEX | sed 's,^[ ]*</>[ ]*$,,' > ../$INDEXFILE
mv -f ../$INDEXFILE ../$FINAL_INDEX
echo Rerunning $SGML_JADE...
$SGML_JADE -t sgml -i html -d $STUFFPATH/stylesheets/redhat.dsl#html ../${SGML_FILE_NAME}.sgml

View File

@ -0,0 +1,89 @@
# Based on original from Eric Bischoff <eric@caldera.de>
# Create an HTML document with index and figures in place.
# This is done by:
# 1. Converting from SGML to HTML
# 2. Generating an SGML index based on the HTML
# 3. Converting from SGML to HTML (taking into account the index this time)
# 4. Copying figures from original source tree into the output directory
# The end result is a directory tree ready for publishing/packaging/whatever...
# Make sure we have an absolute path to the backend, DSSSL stylesheet, and CSS
STUFFPATH=`dirname $0`
if [ -n "${STUFFPATH##/*}" ]
then
STUFFPATH=$PWD/$STUFFPATH
fi
FINAL_INDEX=generated-index.sgml
INDEXFILE=INDEX$$
CSSFILE=$STUFFPATH/css/rhdocs-man.css
# Convert to HTML, generating the HTML.index file that we'll use to
# create an SGML index...
echo Running $SGML_JADE...
$SGML_JADE -t sgml -V html-index $SGML_ARGUMENTS
# Generate the index, fixing up the problem of bogus empty closing tags (</>)...
echo Indexing...
if [ $LANG = "it_IT" ]; then
SYMBOL="-s Simboli"
elif [ $LANG = "es_ES" ]; then
SYMBOL="-s Símbolos"
else
SYMBOL=""
fi
perl /usr/bin/collateindex.pl -g $SYMBOL -i generated-index -o ../$FINAL_INDEX HTML.index
# Not sure if these are still needed; when we first tried collateindex;
# it threw "</>" in the generated index in certain cases...
cat ../$FINAL_INDEX | sed 's,^[ ]*</>[ ]*$,,' > ../$INDEXFILE
mv -f ../$INDEXFILE ../$FINAL_INDEX
# Nuke the HTML.index file; we don't need it anymore...
rm -f HTML.index
echo Rerunning $SGML_JADE...
$SGML_JADE -t sgml $SGML_ARGUMENTS
echo -n "Copying admon graphics..."
if [ ! -d ./stylesheet-images ]; then
mkdir -p ./stylesheet-images
fi
cp $STUFFPATH/stylesheet-images/*.png ./stylesheet-images/
echo "Done!"
if [ -d ../figs/ ]
then
echo -n "Moving figures..."
(cd ../ ; tar chf - figs/) | (tar xf -)
echo "Done!"
echo -n "Cleaning CVS..."
find ./figs/ -type d -name "CVS"|xargs rm -rf
echo -n "EPS..."
find ./figs/ -type f -name "*eps"|xargs rm -f
echo -n ".xvpics..."
find ./figs/ -type d -name ".xvpics"|xargs rm -rf
echo -n ".dia..."
find ./figs/ -type f -name "*dia"|xargs rm -rf
echo -n "directories..."
find ./figs/ -type d -empty|xargs rm -rf
echo "Done!"
fi
echo -n "Adding css..."
cp $CSSFILE rhdocs-man.css
#addcss.py *.html
echo "Done!"
exit 0

View File

@ -0,0 +1,75 @@
#!/bin/bash
# Based on original from Eric Bischoff <eric@caldera.de>
# Modified by Tammy Fox <tfox@redhat.com> for Red Hat Documentation
# Support for Asian Languages by Paul Gampe <pgampe@redhat.com>
JADETEX="jadetex"
CJK="no"
if [ $LANG = "ja_JP" -o $LANG = "zh_TW" \
-o $LANG = "zh_CN" -o $LANG = "ko_KR" ]; then
echo "Enabling Asian Language Support via jadetex-cjk"
JADETEX="jadetex-cjk"
CJK="yes"
fi
# Convert to TeX
$SGML_JADE -t tex -o ${SGML_FILE_NAME}.tex $SGML_ARGUMENTS
if [ $? -ne 0 ]
then exit 1
fi
# Convert from TeX to DVI
$JADETEX ${SGML_FILE_NAME}.tex >${SGML_FILE_NAME}.out
if [ $? -ne 0 -a $CJK != "yes" ]
then
cat ${SGML_FILE_NAME}.out
rm ${SGML_FILE_NAME}.out
rm ${SGML_FILE_NAME}.tex
exit 2
fi
rm ${SGML_FILE_NAME}.out
# If there are unresolved references, re-run jadetex, twice
INDEX_CNT=0
INDEX_MAX=5
while egrep '^LaTeX Warning: There were undefined references.$' ${SGML_FILE_NAME}.log >/dev/null 2>&1
do
if [ $INDEX_CNT -gt $INDEX_MAX ] ; then
echo "Could not resolve undefined references after $INDEX_MAX tries"
exit 1
fi;
echo "$INDEX_CNT: re-running $JADETEX to resolve undefined references"
$JADETEX ${SGML_FILE_NAME}.tex >/dev/null
INDEX_CNT=`expr $INDEX_CNT + 1`
done
#Keep log file - tfox
#rm ${SGML_FILE_NAME}.log
rm ${SGML_FILE_NAME}.aux
rm ${SGML_FILE_NAME}.tex
if [ "$CJK" = "no" ]; then
# Convert from DVI to PostScript
echo -n Converting to PS...
dvips -T 5.49in,8.26in -q ${SGML_FILE_NAME}.dvi -o ${SGML_FILE_NAME}.ps
if [ $? -ne 0 ]
then
rm ${SGML_FILE_NAME}.dvi
exit 3
fi
rm ${SGML_FILE_NAME}.dvi
echo Done!
# Convert from PS to PDF
echo -n Converting to PDF...
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sPAPERSIZE=a5 -sOutputFile=${SGML_FILE_NAME}.pdf ${SGML_FILE_NAME}.ps
rm ${SGML_FILE_NAME}.ps
else
dvipdfm -p a5 ${SGML_FILE_NAME}.dvi > /dev/null
fi
echo Done!
exit 0

View File

@ -0,0 +1,78 @@
#!/bin/bash
# Based on original from Eric Bischoff <eric@caldera.de>
# Modified by Tammy Fox <tfox@redhat.com> for Red Hat Documentation
# Support for Asian Languages by Paul Gampe <pgampe@redhat.com>
JADETEX="jadetex"
CJK="no"
if [ $LANG = "ja_JP" -o $LANG = "zh_TW" \
-o $LANG = "zh_CN" -o $LANG = "ko_KR" ]; then
echo "Enabling Asian Language Support via jadetex-cjk"
JADETEX="jadetex-cjk"
CJK="yes"
fi
# Convert to TeX
$SGML_JADE -t tex -o ${SGML_FILE_NAME}.tex $SGML_ARGUMENTS
if [ $? -ne 0 ]
then exit 1
fi
# Convert from TeX to DVI
$JADETEX ${SGML_FILE_NAME}.tex >${SGML_FILE_NAME}.out
if [ $? -ne 0 -a $CJK != "yes" ]
then
cat ${SGML_FILE_NAME}.out
rm ${SGML_FILE_NAME}.out
rm ${SGML_FILE_NAME}.tex
exit 2
fi
rm ${SGML_FILE_NAME}.out
# If there are unresolved references, re-run jadetex, twice
INDEX_CNT=0
INDEX_MAX=5
while egrep '^LaTeX Warning: There were undefined references.$' ${SGML_FILE_NAME}.log >/dev/null 2>&1
do
if [ $INDEX_CNT -gt $INDEX_MAX ] ; then
echo "Could not resolve undefined references after $INDEX_MAX tries"
exit 1
fi;
echo "$INDEX_CNT: re-running $JADETEX to resolve undefined references"
$JADETEX ${SGML_FILE_NAME}.tex >/dev/null
INDEX_CNT=`expr $INDEX_CNT + 1`
done
#Keep log file - tfox
#rm ${SGML_FILE_NAME}.log
rm ${SGML_FILE_NAME}.aux
rm ${SGML_FILE_NAME}.tex
if [ "$CJK" = "no" ]; then
# Convert from DVI to PostScript
echo -n Converting to PS...
dvips -T 5.49in,8.26in -q ${SGML_FILE_NAME}.dvi -o ${SGML_FILE_NAME}.ps
if [ $? -ne 0 ]
then
rm ${SGML_FILE_NAME}.dvi
exit 3
fi
rm ${SGML_FILE_NAME}.dvi
echo Done!
# Convert from PS to PDF
echo -n Converting to PDF...
gs -q -dNOPAUSE -dBATCH \
-dEncodeGrayImages=false -dAntiAliasGrayImages=true \
-sDEVICE=pdfwrite -sPAPERSIZE=a5 -sOutputFile=${SGML_FILE_NAME}.pdf ${SGML_FILE_NAME}.ps
rm ${SGML_FILE_NAME}.ps
else
dvipdfm -p a5 ${SGML_FILE_NAME}.dvi > /dev/null
fi
echo Done!
exit 0

View File

@ -0,0 +1,44 @@
# Based on original from Eric Bischoff <eric@caldera.de>
# Modified by Tammy Fox <tfox@redhat.com> for Red Hat Documentation
# Convert to TeX
$SGML_JADE -t tex -o ${SGML_FILE_NAME}.tex $SGML_ARGUMENTS
if [ $? -ne 0 ]
then exit 1
fi
# Convert from TeX to DVI
jadetex ${SGML_FILE_NAME}.tex >${SGML_FILE_NAME}.out
if [ $? -ne 0 ]
then
cat ${SGML_FILE_NAME}.out
rm ${SGML_FILE_NAME}.out
rm ${SGML_FILE_NAME}.tex
exit 2
fi
rm ${SGML_FILE_NAME}.out
# If there are unresolved references, re-run jadetex, twice
if egrep '^LaTeX Warning: There were undefined references.$' ${SGML_FILE_NAME}.log >/dev/null 2>&1
then
jadetex ${SGML_FILE_NAME}.tex >/dev/null
jadetex ${SGML_FILE_NAME}.tex >/dev/null
fi
#Keep log file - tfox
#rm ${SGML_FILE_NAME}.log
rm ${SGML_FILE_NAME}.aux
rm ${SGML_FILE_NAME}.tex
# Convert from DVI to PostScript
echo -n Converting to PS...
dvips -T 5.49in,8.26in -k -q ${SGML_FILE_NAME}.dvi -o ${SGML_FILE_NAME}.ps
if [ $? -ne 0 ]
then
rm ${SGML_FILE_NAME}.dvi
exit 3
fi
rm ${SGML_FILE_NAME}.dvi
echo Done!
exit 0

View File

@ -0,0 +1,50 @@
# Based on original from Eric Bischoff <eric@caldera.de>
# Modified by Tammy Fox <tfox@redhat.com> for Red Hat Documentation
# Convert to TeX
$SGML_JADE -t tex -o ${SGML_FILE_NAME}.tex $SGML_ARGUMENTS
if [ $? -ne 0 ]
then exit 1
fi
# Convert from TeX to DVI
jadetex ${SGML_FILE_NAME}.tex >${SGML_FILE_NAME}.out
if [ $? -ne 0 ]
then
cat ${SGML_FILE_NAME}.out
rm ${SGML_FILE_NAME}.out
rm ${SGML_FILE_NAME}.tex
exit 2
fi
rm ${SGML_FILE_NAME}.out
# If there are unresolved references, re-run jadetex, twice
if egrep '^LaTeX Warning: There were undefined references.$' ${SGML_FILE_NAME}.log >/dev/null 2>&1
then
jadetex ${SGML_FILE_NAME}.tex >/dev/null
jadetex ${SGML_FILE_NAME}.tex >/dev/null
fi
#Keep log file - tfox
#rm ${SGML_FILE_NAME}.log
rm ${SGML_FILE_NAME}.aux
rm ${SGML_FILE_NAME}.tex
# Convert from DVI to PostScript
echo -n Converting to PS...
dvips -T 8.5in,11in -q ${SGML_FILE_NAME}.dvi -o ${SGML_FILE_NAME}.ps
if [ $? -ne 0 ]
then
rm ${SGML_FILE_NAME}.dvi
exit 3
fi
rm ${SGML_FILE_NAME}.dvi
echo Done!
# Convert from PS to PDF
echo -n Converting to PDF...
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sPAPERSIZE=letter -sOutputFile=${SGML_FILE_NAME}.pdf ${SGML_FILE_NAME}.ps
rm ${SGML_FILE_NAME}.ps
echo Done!
exit 0

View File

@ -0,0 +1,44 @@
# Based on original from Eric Bischoff <eric@caldera.de>
# Modified by Tammy Fox <tfox@redhat.com> for Red Hat Documentation
# Convert to TeX
$SGML_JADE -t tex -o ${SGML_FILE_NAME}.tex $SGML_ARGUMENTS
if [ $? -ne 0 ]
then exit 1
fi
# Convert from TeX to DVI
jadetex ${SGML_FILE_NAME}.tex >${SGML_FILE_NAME}.out
if [ $? -ne 0 ]
then
cat ${SGML_FILE_NAME}.out
rm ${SGML_FILE_NAME}.out
rm ${SGML_FILE_NAME}.tex
exit 2
fi
rm ${SGML_FILE_NAME}.out
# If there are unresolved references, re-run jadetex, twice
if egrep '^LaTeX Warning: There were undefined references.$' ${SGML_FILE_NAME}.log >/dev/null 2>&1
then
jadetex ${SGML_FILE_NAME}.tex >/dev/null
jadetex ${SGML_FILE_NAME}.tex >/dev/null
fi
#Keep log file - tfox
#rm ${SGML_FILE_NAME}.log
rm ${SGML_FILE_NAME}.aux
rm ${SGML_FILE_NAME}.tex
# Convert from DVI to PostScript
echo -n Converting to PS...
dvips -T 8.5in,11in -k -q ${SGML_FILE_NAME}.dvi -o ${SGML_FILE_NAME}.ps
if [ $? -ne 0 ]
then
rm ${SGML_FILE_NAME}.dvi
exit 3
fi
rm ${SGML_FILE_NAME}.dvi
echo Done!
exit 0

View File

@ -0,0 +1,52 @@
# Based on original from Eric Bischoff <eric@caldera.de>
# Modified by Tammy Fox <tfox@redhat.com> for Red Hat Documentation
# Convert to TeX
$SGML_JADE -t tex -o ${SGML_FILE_NAME}.tex $SGML_ARGUMENTS
if [ $? -ne 0 ]
then exit 1
fi
# Convert from TeX to DVI
jadetex ${SGML_FILE_NAME}.tex >${SGML_FILE_NAME}.out
if [ $? -ne 0 ]
then
cat ${SGML_FILE_NAME}.out
rm ${SGML_FILE_NAME}.out
rm ${SGML_FILE_NAME}.tex
exit 2
fi
rm ${SGML_FILE_NAME}.out
# If there are unresolved references, re-run jadetex, twice
if egrep '^LaTeX Warning: There were undefined references.$' ${SGML_FILE_NAME}.log >/dev/null 2>&1
then
jadetex ${SGML_FILE_NAME}.tex >/dev/null
jadetex ${SGML_FILE_NAME}.tex >/dev/null
fi
#Keep log file - tfox
#rm ${SGML_FILE_NAME}.log
rm ${SGML_FILE_NAME}.aux
rm ${SGML_FILE_NAME}.tex
echo ${DVI_PAGES}
# Convert from DVI to PostScript
echo -n Converting to PS...
dvips -T 5.49in,8.26in -pp ${DVI_PAGES} -q ${SGML_FILE_NAME}.dvi -o ${SGML_FILE_NAME}-pg${DVI_PAGES}.ps
if [ $? -ne 0 ]
then
# rm ${SGML_FILE_NAME}.dvi
exit 3
fi
#rm ${SGML_FILE_NAME}.dvi
echo Done!
# Convert from PS to PDF
echo -n Converting to PDF...
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sPAPERSIZE=a5 -sOutputFile=${SGML_FILE_NAME}-pg${DVI_PAGES}.pdf ${SGML_FILE_NAME}-pg${DVI_PAGES}.ps
rm ${SGML_FILE_NAME}-pg${DVI_PAGES}.ps
echo Done!
exit 0

View File

@ -0,0 +1,46 @@
# Based on original from Eric Bischoff <eric@caldera.de>
# Modified by Tammy Fox <tfox@redhat.com> for Red Hat Documentation
# Convert to TeX
$SGML_JADE -t tex -o ${SGML_FILE_NAME}.tex $SGML_ARGUMENTS
if [ $? -ne 0 ]
then exit 1
fi
# Convert from TeX to DVI
jadetex ${SGML_FILE_NAME}.tex >${SGML_FILE_NAME}.out
if [ $? -ne 0 ]
then
cat ${SGML_FILE_NAME}.out
rm ${SGML_FILE_NAME}.out
rm ${SGML_FILE_NAME}.tex
exit 2
fi
rm ${SGML_FILE_NAME}.out
# If there are unresolved references, re-run jadetex, twice
if egrep '^LaTeX Warning: There were undefined references.$' ${SGML_FILE_NAME}.log >/dev/null 2>&1
then
jadetex ${SGML_FILE_NAME}.tex >/dev/null
jadetex ${SGML_FILE_NAME}.tex >/dev/null
fi
#Keep log file - tfox
#rm ${SGML_FILE_NAME}.log
rm ${SGML_FILE_NAME}.aux
rm ${SGML_FILE_NAME}.tex
echo ${DVI_PAGES}
# Convert from DVI to PostScript
echo -n Converting to PS...
dvips -T 5.49in,8.26in -k -pp ${DVI_PAGES} -q ${SGML_FILE_NAME}.dvi -o ${SGML_FILE_NAME}-pg${DVI_PAGES}.ps
if [ $? -ne 0 ]
then
# rm ${SGML_FILE_NAME}.dvi
exit 3
fi
#rm ${SGML_FILE_NAME}.dvi
echo Done!
exit 0

View File

@ -0,0 +1,89 @@
#!/usr/bin/perl
#
#
# convert image to Encapsulated Postscript, with possible scaling of width
#
# Downloaded from http://people.redhat.com/dcm/
#
# Modified by tfox for Red Hat Documentation - default to width of 4
#
# Modified by tfox for Red Hat Documentation - if eps exists, use same scaling
#
if ($ARGV[0] =~ /^--width=(.+)$/) {
$width = $1;
shift (@ARGV);
}
#print "width =",$width,"\n";
#print "argv =",$ARGV[0],"\n";
$infile = $ARGV[0];
$outfile = $infile;
$outfile =~ s/\.png/\.eps/;
if (!(-e $infile)) {
print "File doesn't exist\n";
exit 1;
}
if (!(-e $outfile)) {
# print "EPS File doesn't exist\n";
#default width to 4 if it is not specified
if ($width == "") {
$width = "4";
}
} else
{
#if eps exists AND no width is specified, use existing scaling
if ($width == "") {
print "scaling $infile based on existing EPS\n";
$epsimagesz = `identify $outfile`;
#print "epsimagesz=", $epsimagesz,"\n";
($epsname, $epstype, $epssize, $epsrest) = split / /, $epsimagesz, 4;
# print "epssplit:", $epsname, " ", $epstype, " ", $epssize, " ", $epsrest, "\n";
#print "epssize = ",$epssize,"\n";
($epsx, $epsy) = split /x/, $epssize, 2;
($epsy, $epsrest) = split /\+/, $epsy, 2;
#print $epsx," by ",$epsy, "\n";
$width = $epsx/72.0;
#print "epswidth=", $width, "\n";
}
}
$imagesz = `identify $ARGV[0]`;
#print "imagesz=", $imagesz,"\n";
($name, $type, $size, $rest) = split / /, $imagesz, 4;
#print "split:", $name, " ", $type, " ", $size, " ", $rest, "\n";
#print "size = ",$size,"\n";
($x, $y) = split /x/, $size, 2;
($y, $rest) = split /\+/, $y, 2;
#print $x," by ",$y, "\n";
# if width set, we need to scale
if ($width != "") {
$scale = $width * (72.0/$x);
} else {
$scale = 1;
}
$scale = 72.0/$scale;
#print "scale = ",$scale,"\n";
#print $infile," ",$outfile,"\n";
system("convert $infile tmpimage.pgm");
#system("giftopnm $infile | ppmtopgm > tmpimage.pgm");
system("convert -density $scale -colorspace gray tmpimage.pgm $outfile");
system("rm tmpimage.pgm");

View File

@ -0,0 +1,87 @@
#!/usr/bin/perl
#
#
# convert image to Encapsulated Postscript, with possible scaling of width
#
# Downloaded from http://people.redhat.com/dcm/
#
# Modified by tfox for Red Hat Documentation - default to width of 4
#
# Modified by tfox for Red Hat Documentation - if eps exists, use same scaling
#
if ($ARGV[0] =~ /^--width=(.+)$/) {
$width = $1;
shift (@ARGV);
}
#print "width =",$width,"\n";
#print "argv =",$ARGV[0],"\n";
$infile = $ARGV[0];
$outfile = $infile;
if (!(-e $infile)) {
print "File doesn't exist\n";
exit 1;
}
if (!(-e $outfile)) {
# print "EPS File doesn't exist\n";
#default width to 4 if it is not specified
if ($width == "") {
$width = "4";
}
} else
{
#if eps exists AND no width is specified, use existing scaling
if ($width == "") {
print "scaling $infile based on existing EPS\n";
$epsimagesz = `identify $outfile`;
#print "epsimagesz=", $epsimagesz,"\n";
($epsname, $epstype, $epssize, $epsrest) = split / /, $epsimagesz, 4;
# print "epssplit:", $epsname, " ", $epstype, " ", $epssize, " ", $epsrest, "\n";
#print "epssize = ",$epssize,"\n";
($epsx, $epsy) = split /x/, $epssize, 2;
($epsy, $epsrest) = split /\+/, $epsy, 2;
#print $epsx," by ",$epsy, "\n";
$width = $epsx/72.0;
#print "epswidth=", $width, "\n";
}
}
$imagesz = `identify $ARGV[0]`;
#print "imagesz=", $imagesz,"\n";
($name, $type, $size, $rest) = split / /, $imagesz, 4;
#print "split:", $name, " ", $type, " ", $size, " ", $rest, "\n";
#print "size = ",$size,"\n";
($x, $y) = split /x/, $size, 2;
($y, $rest) = split /\+/, $y, 2;
#print $x," by ",$y, "\n";
# if width set, we need to scale
if ($width != "") {
$scale = $width * (72.0/$x);
} else {
$scale = 1;
}
$scale = 72.0/$scale;
#print "scale = ",$scale,"\n";
#print $infile," ",$outfile,"\n";
system("convert $infile tmpimage.pgm");
system("convert -density $scale -colorspace gray tmpimage.pgm $outfile");
system("rm tmpimage.pgm");

View File

@ -0,0 +1,136 @@
package com.redhat.ccm.documentation;
import java.io.*;
import java.util.*;
/**
* Splitter
*
* @author Rafael H. Schloming &lt;rhs@mit.edu&gt;
* @version $Revision: #1 $ $Date: 2003/09/18 $
**/
public class Splitter {
public final static String versionId = "$Id: Splitter.java 287 2005-02-22 00:29:02Z sskracic $ by $Author: sskracic $, $DateTime: 2003/09/18 15:50:41 $";
private static final String BEGIN = "@rhdoc.begin";
private static final String END = "@rhdoc.end";
private File m_dir;
private HashMap m_examples = new HashMap();
public Splitter(File dir) {
m_dir = dir;
}
public Splitter(String dir) {
this(new File(dir));
}
private FileWriter getExample(String example) {
return (FileWriter) m_examples.get(example);
}
private Collection getExamples() {
return m_examples.values();
}
private void beginExample(String example) throws IOException {
File file = new File(m_dir, example);
File parent = file.getParentFile();
if (parent != null) { parent.mkdirs(); }
FileWriter fw = new FileWriter(file);
fw.write("<![CDATA[");
m_examples.put(example, fw);
}
private void endExample(String example) throws IOException {
FileWriter fw = getExample(example);
fw.write("]]>\n");
fw.close();
m_examples.remove(example);
}
private boolean hasExample(String example) {
return m_examples.containsKey(example);
}
private void endExamples() throws IOException {
for (Iterator it = m_examples.entrySet().iterator(); it.hasNext(); ) {
Map.Entry me = (Map.Entry) it.next();
FileWriter fw = (FileWriter) me.getValue();
fw.close();
it.remove();
}
}
private void writeln(String line) throws IOException {
for (Iterator it = getExamples().iterator(); it.hasNext(); ) {
FileWriter fw = (FileWriter) it.next();
fw.write(line);
fw.write("\n");
}
}
public void split(String file) throws IOException {
split(new File(file));
}
public void split(File file) throws IOException {
FileReader fr = new FileReader(file);
LineNumberReader lines = new LineNumberReader(fr);
while (true) {
String line = lines.readLine();
if (line == null) { break; }
int index = line.indexOf(END);
if (index >= 0) {
String example = line.substring(index + END.length()).trim();
if (hasExample(example)) {
endExample(example);
continue;
} else {
System.err.println
(file + ":" + lines.getLineNumber() +
": no matching begin, ignoring directive");
}
}
index = line.indexOf(BEGIN);
if (index >= 0) {
String example = line.substring(index + BEGIN.length()).trim();
beginExample(example);
continue;
}
writeln(line);
}
endExamples();
fr.close();
lines.close();
}
private static final String USAGE =
"Usage: splitter <directory> <file_1> ... <file_n>";
public static void main(String[] args) {
if (args.length < 2) {
System.err.println(USAGE);
return;
}
try {
Splitter splitter = new Splitter(args[0]);
for (int i = 1; i < args.length; i++) {
splitter.split(args[i]);
}
} catch (IOException e) {
System.err.println(e.getMessage());
}
}
}

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Some files were not shown because too many files have changed in this diff Show More