Java tutorial
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. The ASF licenses this file to You * under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. For additional information regarding * copyright in this work, please see the NOTICE file in the top level * directory of this distribution. */ package org.apache.roller.weblogger.webservices.atomprotocol; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.apache.roller.weblogger.WebloggerException; import org.apache.roller.weblogger.business.MediaFileManager; import org.apache.roller.weblogger.business.Weblogger; import org.apache.roller.weblogger.business.WebloggerFactory; import org.apache.roller.weblogger.config.WebloggerRuntimeConfig; import org.apache.roller.weblogger.pojos.MediaFileDirectory; import org.apache.roller.weblogger.pojos.RuntimeConfigProperty; import org.apache.roller.weblogger.pojos.User; import org.apache.roller.weblogger.pojos.Weblog; import org.apache.roller.weblogger.pojos.WeblogCategory; import org.apache.roller.weblogger.pojos.WeblogPermission; import org.apache.roller.weblogger.util.Utilities; import com.sun.syndication.feed.atom.Category; import com.sun.syndication.propono.atom.common.AtomService; import com.sun.syndication.propono.atom.common.Categories; import com.sun.syndication.propono.atom.common.Collection; import com.sun.syndication.propono.atom.common.Workspace; import com.sun.syndication.propono.atom.server.AtomException; /** * Roller's Atom service. */ public class RollerAtomService extends AtomService { //private Map workspaceMap = new TreeMap(); //private Map collectionMap = new TreeMap(); //private static Properties cacheProps = new Properties(); //private boolean firstTime = true; /** * Creates a new instance of FileBasedAtomService. */ public RollerAtomService(User user, String atomURL) throws WebloggerException, AtomException { Weblogger roller = WebloggerFactory.getWeblogger(); List perms = null; if (!WebloggerRuntimeConfig.getBooleanProperty("webservices.enableAtomPub")) { throw new AtomException("AtomPub not enabled for this Roller installation"); } try { perms = roller.getUserManager().getWeblogPermissions(user); } catch (WebloggerException re) { throw new AtomException("Getting user's weblogs", re); } List uploadAccepts = new ArrayList(); try { uploadAccepts = getAcceptedContentTypeRange(); } catch (WebloggerException re) { throw new AtomException("Getting site's accept range", re); } if (perms != null) { for (Iterator iter = perms.iterator(); iter.hasNext();) { WeblogPermission perm = (WeblogPermission) iter.next(); Weblog weblog = perm.getWeblog(); Workspace workspace = null; try { // Create workspace to represent weblog workspace = new Workspace(Utilities.removeHTML(perm.getWeblog().getName()), "text"); addWorkspace(workspace); // Create collection for entries within that workspace Collection entryCol = new Collection("Weblog Entries", "text", atomURL + "/" + weblog.getHandle() + "/entries"); entryCol.addAccept("application/atom+xml;type=entry"); // Add fixed categories using scheme that points to // weblog because categories are weblog specific weblog = perm.getWeblog(); Categories cats = new Categories(); cats.setFixed(true); cats.setScheme(getWeblogCategoryScheme(weblog)); List rollerCats = roller.getWeblogEntryManager().getWeblogCategories(weblog, false); for (Iterator it = rollerCats.iterator(); it.hasNext();) { WeblogCategory rollerCat = (WeblogCategory) it.next(); Category cat = new Category(); cat.setTerm(rollerCat.getPath().substring(1)); cat.setLabel(rollerCat.getName()); cats.addCategory(cat); } entryCol.addCategories(cats); // Add tags as free-form categories using scheme that points // to site because tags can be considered site-wide Categories tags = new Categories(); tags.setFixed(false); entryCol.addCategories(tags); workspace.addCollection(entryCol); } catch (Exception e) { throw new AtomException("Creating weblog entry collection for service doc", e); } // And add one media collection for each of weblog's upload directories try { MediaFileManager mgr = roller.getMediaFileManager(); List<MediaFileDirectory> dirs = mgr.getMediaFileDirectories(weblog); for (MediaFileDirectory dir : dirs) { Collection uploadSubCol = new Collection("Media Files: " + dir.getPath(), "text", atomURL + "/" + weblog.getHandle() + "/resources/" + dir.getPath()); uploadSubCol.setAccepts(uploadAccepts); workspace.addCollection(uploadSubCol); } } catch (Exception e) { throw new AtomException("Creating weblog entry collection for service doc", e); } } } } /** * Build accept range by taking things that appear to be content-type rules * from site's file-upload allowed extensions. */ private List getAcceptedContentTypeRange() throws WebloggerException { List accepts = new ArrayList(); Weblogger roller = WebloggerFactory.getWeblogger(); Map config = roller.getPropertiesManager().getProperties(); String allows = ((RuntimeConfigProperty) config.get("uploads.types.allowed")).getValue(); String[] rules = StringUtils.split(StringUtils.deleteWhitespace(allows), ","); for (int i = 0; i < rules.length; i++) { if (rules[i].indexOf("/") == -1) continue; accepts.add(rules[i]); } return accepts; } public static String getWeblogCategoryScheme(Weblog website) { return WebloggerFactory.getWeblogger().getUrlStrategy().getWeblogURL(website, null, true); } }