Attached is a utility for creating a full website.The attached code creates the site, site areas,content ,sets the security permissions and adds the workflow to the content.
I have set this up as it is extremely useful.Consider this,if you add a controller plus an online form you now have a website creator :-)
I will continue posting some great LWCM work but will spice it up with some Portal.
Yours in Websphere
T.J.S.
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;
import javax.servlet.http.HttpServletRequest;
import com.ibm.workplace.wcm.api.ChildPosition;
import com.ibm.workplace.wcm.api.Content;
import com.ibm.workplace.wcm.api.DocumentId;
import com.ibm.workplace.wcm.api.DocumentIdIterator;
import com.ibm.workplace.wcm.api.DocumentLibrary;
import com.ibm.workplace.wcm.api.DocumentType;
import com.ibm.workplace.wcm.api.DocumentTypes;
import com.ibm.workplace.wcm.api.LibraryComponent;
import com.ibm.workplace.wcm.api.LibraryImageComponent;
import com.ibm.workplace.wcm.api.ReferenceComponent;
import com.ibm.workplace.wcm.api.RichTextComponent;
import com.ibm.workplace.wcm.api.Site;
import com.ibm.workplace.wcm.api.SiteArea;
import com.ibm.workplace.wcm.api.SiteFrameworkContainer;
import com.ibm.workplace.wcm.api.TextComponent;
import com.ibm.workplace.wcm.api.WCM_API;
import com.ibm.workplace.wcm.api.Workspace;
import com.ibm.workplace.wcm.api.exceptions.ComponentNotFoundException;
import com.ibm.workplace.wcm.api.exceptions.OperationFailedException;
import com.ibm.workplace.wcm.api.exceptions.ServiceNotAvailableException;
private Workspace workspace;
private final String libraryName;
private final Map contentFieldsForSiteArea = new HashMap();
public WcmApiUtilBean(String libraryName) throws Exception {
super();
this.libraryName = libraryName;
this.initWorkspace();
}
private void initWorkspace() throws Exception {
ResourceBundle resource = ResourceBundle.getBundle("xxxxxxxxxx");
String wcmUserName = resource.getString("xxxxxxxx").trim();
String wcmUserPassword = resource.getString("xxxxxxxx").trim();
this.workspace = WCM_API.getRepository().getWorkspace(wcmUserName, wcmUserPassword);
DocumentLibrary docLib = this.workspace.getDocumentLibrary(this.libraryName);
this.workspace.setCurrentDocumentLibrary(docLib);
}
public void closeWorkspace() {
WCM_API.getRepository().endWorkspace();
this.workspace = null;
}
private DocumentId[] getWCMDocumentsByName(String wcmName, DocumentType documentTypes) {
List documentIds = new ArrayList();
DocumentIdIterator docIdIter = workspace.findByName(documentTypes, wcmName);
if (docIdIter.hasNext()) {
DocumentId wcmDocumentId = docIdIter.nextId();
documentIds.add(wcmDocumentId);
}
return (DocumentId[]) documentIds.toArray(new DocumentId[documentIds.size()]);
}
private DocumentId[] getWCMDocumentsByPath(String wcmPath, int workFlowStatus) {
List documentIds = new ArrayList();
DocumentIdIterator docIdIter = workspace.findByPath(wcmPath, workFlowStatus);
if (docIdIter != null && docIdIter.hasNext()) {
DocumentId wcmDocumentId = docIdIter.nextId();
documentIds.add(wcmDocumentId);
}
return (DocumentId[]) documentIds.toArray(new DocumentId[documentIds.size()]);
}
private SiteFrameworkContainer setTemplateMapping(SiteFrameworkContainer aWCMObject, String presTemp, String authoringTemp) throws Exception {
DocumentId[] authIds = null;
DocumentId[] presIds = null;
authIds = getWCMDocumentsByName(authoringTemp, DocumentTypes.AuthoringTemplate);
presIds = getWCMDocumentsByName(presTemp, DocumentTypes.PresentationTemplate);
if ((authIds.length == 1) && (presIds.length == 1)) {
if (!aWCMObject.hasTemplateMapping(authIds[0])) {
aWCMObject.addTemplateMapping(authIds[0], presIds[0]);
} else {
DocumentIdIterator docIt = aWCMObject.getAuthoringTemplateIds();
if (docIt.hasNext()) {
} else {
aWCMObject.addTemplateMapping(authIds[0], presIds[0]);
}
System.out.println("TemplateMapping authName = " + authoringTemp + " and presName = " + presTemp + " added to object " + aWCMObject.getName());
workspace.save(aWCMObject);
}
} else {
throw new Exception("Expected to find only one Authoring Template with Name:" + authoringTemp + " and Presentation Template with Name:" + presTemp);
}
return aWCMObject;
}
private SiteFrameworkContainer setSecuritySettings(SiteFrameworkContainer aWCMObject) throws Exception {
String accessType = "addReadAccessMembers";
String[] accessnl = new String[] { "[all authenticated portal users]", "anonymous portal user" };
for (int y = 0; y < accessnl.length; y++) {
String access = accessnl[y];
if (accessType.equals("addReadAccessMembers")) {
aWCMObject.addReadAccessMembers(new String[] { access });
System.out.println("addReadAccessMembers for Object = " + aWCMObject.getName() + " members = " + access);
} else if (accessType.equals("addEditAccessMembers")) {
aWCMObject.addEditAccessMembers(new String[] { access });
System.out.println("addEditAccessMembers for Object = " + aWCMObject.getName() + " members = " + access);
} else if (accessType.equals("addDeleteAccessMembers")) {
aWCMObject.addDeleteAccessMembers(new String[] { access });
System.out.println("addDeleteAccessMembers for Object = " + aWCMObject.getName() + " members = " + access);
}
}
workspace.save(aWCMObject);
return aWCMObject;
}
private SiteFrameworkContainer setTemplates(SiteFrameworkContainer aWCMObject, String presTemp, String authoringTemp) throws Exception {
aWCMObject = setTemplateMapping(aWCMObject, presTemp, authoringTemp);
aWCMObject = setSecuritySettings(aWCMObject);
return aWCMObject;
}
private Content addTextComponent(Content aContent, String aTextField, String aValue) throws Exception {
TextComponent txtComp = (TextComponent) aContent.getComponent(aTextField);
txtComp.setText(aValue);
aContent.setComponent(aTextField, txtComp);
return aContent;
}
private Content addComponentReference(Content aContent, String fieldName, String value) throws Exception {
DocumentId[] documentIds = this.getWCMDocumentsByName(value,DocumentTypes.LibraryImageComponent);
ReferenceComponent refComp = (ReferenceComponent) aContent.getComponent(fieldName);
LibraryComponent libComp = (LibraryComponent)workspace.getById(documentIds[0]);
refComp.setComponentRef(libComp);
aContent.setComponent(fieldName,refComp);
return aContent;
}
private Content addRichTextComponent(Content aContent, String aTextField, String aValue) throws Exception {
RichTextComponent txtComp = (RichTextComponent) aContent.getComponent(aTextField);
txtComp.setRichText(aValue);
aContent.setComponent(aTextField, txtComp);
return aContent;
}
private Content setTextComponentForContent(Content aContent, String name, String value) throws Exception {
String textField = name;
String text = value;
aContent = addTextComponent(aContent, textField, text);
if (aContent != null) {
System.out.println("adding textField = " + textField + " to content " + aContent.getName());
}
if (aContent == null) {
return null;
} else {
return aContent;
}
}
private Content setComponentReferenceForContent(Content aContent, String name, String value) throws Exception {
aContent = addComponentReference(aContent, name, value);
if (aContent != null) {
System.out.println("adding Component Reference = " + name + " to content " + aContent.getName());
}
if (aContent == null) {
return null;
} else {
return aContent;
}
}
private Content setRichTextComponentForContent(Content aContent,String name,String value) throws Exception {
aContent = addRichTextComponent(aContent, name, value);
return aContent;
}
private SiteArea addDefaultContentToSiteArea(SiteArea aSiteArea, String authoringTempName, String contentTitleValue,String contentBodyValue) throws Exception {
String contentName = aSiteArea.getParent().getName() + "_" + aSiteArea.getName() + "_c";
DocumentId[] defaultAuthIds = getWCMDocumentsByName(authoringTempName, DocumentTypes.AuthoringTemplate);
if (defaultAuthIds.length > 0) {
if (defaultAuthIds.length == 1) {
System.out.println("defaultAuthId = " + defaultAuthIds[0]);
Content content = null;
DocumentId[] defaultContentIds = getWCMDocumentsByName(contentName, DocumentTypes.Content);
DocumentId defaultContentId;
if (defaultContentIds.length > 0) {
if (defaultContentIds.length == 1) {
content = (Content) workspace.getById(defaultContentIds[0]);
} else {
throw new Exception("Found more than on Content Item with the Same name:" + contentName);
}
defaultContentId = defaultContentIds[0];
} else {
content = workspace.createContent(defaultAuthIds[0], aSiteArea.getId(), null, ChildPosition.START);
defaultContentId = content.getId();
content.setName(contentName);
content.setTitle(contentName);
}
content = setTextComponentForContent(content, "Title", contentTitleValue);
content = setRichTextComponentForContent(content,"Body",contentBodyValue);
String workflowName = new String("xxxxxx");
DocumentIdIterator workflowIterator = workspace.findByName(DocumentTypes.Workflow, workflowName);
if (workflowIterator.hasNext()) {
DocumentId workflowId = workflowIterator.nextId();
System.out.println("Workflow found : " + workflowName + "
");
if (!content.isPublished()) {
content.setWorkflowId(workflowId);
workspace.save(content);
content.nextWorkflowStage();
System.out.println("Moved to next workflowstage");
}
} else {
System.out.println("Could not find Workflow: " + workflowName + "
");
}
aSiteArea.setDefaultContent(defaultContentId);
return aSiteArea;
} else {
throw new Exception("Found more than one Authoring Template with the same name:" + authoringTempName);
}
} else {
throw new Exception("Did not find more than one Authoring Template with the same name:" + authoringTempName);
}
}
private boolean saveToWorkspace(com.ibm.workplace.wcm.api.Document wcmDocument) throws Exception {
String[] errors = workspace.save(wcmDocument);
for (int i = 0; i < errors.length; i++) {
System.out.println("Error while saving " + wcmDocument.getName() + " : " + errors[i]);
}
if (errors.length > 0) {
return false;
}
return true;
}
protected void finalize() throws Throwable {
this.closeWorkspace();
super.finalize();
}
public Site obtainSite(String siteName, String presTemp, String authoringTemp) throws Exception {
Site site = null;
DocumentId[] siteIds = getWCMDocumentsByName(siteName, DocumentTypes.Site);
if (siteIds.length > 0) {
if (siteIds.length == 1) {
site = (Site) workspace.getById(siteIds[0]);
} else {
throw new Exception("More then one Site found with the Same name:" + siteName);
}
} else {
site = workspace.createSite();
site.setName(siteName);
site.setTitle(siteName);
String[] messages = workspace.save(site);
for (int i = 0; i < messages.length; i++) {
System.out.println("Message = " + messages[i]);
}
site = (Site) setTemplates(site, presTemp, authoringTemp);
}
return site;
}
public SiteArea obtainSiteArea(String siteAreaName, String presTemp, String authoringTemp, DocumentId parentId, String siteContentTitleValue,String siteContentBodyValue) throws Exception {
SiteArea sa = null;
String parentPath = workspace.getPathById(parentId, true, true);
String siteAreaPath = parentPath + "/" + siteAreaName;
DocumentId[] siteAreaIds = getWCMDocumentsByPath(siteAreaPath, Workspace.WORKFLOWSTATUS_ALL);
if (siteAreaIds.length > 0) {
// if (siteAreaIds.length == 1) {
// sa = (SiteArea) workspace.getById(siteAreaIds[0]);
// } else {
throw new Exception("Found more than one Sitearea with the same name:" + siteAreaName);
// }
} else {
sa = workspace.createSiteArea(parentId, null, 1);
sa.setTitle(siteAreaName);
sa.setName(siteAreaName);
workspace.save(sa);
}
sa = (SiteArea) setTemplates(sa, presTemp, authoringTemp);
boolean saved = saveToWorkspace(sa);
sa = addDefaultContentToSiteArea(sa, authoringTemp, siteContentTitleValue,siteContentBodyValue);
saved = saveToWorkspace(sa);
System.out.println("site area = " + sa.getName());
return sa;
}
}