Source Code Cross Referenced for BlogProvisioningListener.java in  » Portal » Open-Portal » com » sun » portal » app » blog » provision » Java Source Code / Java DocumentationJava Source Code and Java Documentation

Java Source Code / Java Documentation
1. 6.0 JDK Core
2. 6.0 JDK Modules
3. 6.0 JDK Modules com.sun
4. 6.0 JDK Modules com.sun.java
5. 6.0 JDK Modules sun
6. 6.0 JDK Platform
7. Ajax
8. Apache Harmony Java SE
9. Aspect oriented
10. Authentication Authorization
11. Blogger System
12. Build
13. Byte Code
14. Cache
15. Chart
16. Chat
17. Code Analyzer
18. Collaboration
19. Content Management System
20. Database Client
21. Database DBMS
22. Database JDBC Connection Pool
23. Database ORM
24. Development
25. EJB Server geronimo
26. EJB Server GlassFish
27. EJB Server JBoss 4.2.1
28. EJB Server resin 3.1.5
29. ERP CRM Financial
30. ESB
31. Forum
32. GIS
33. Graphic Library
34. Groupware
35. HTML Parser
36. IDE
37. IDE Eclipse
38. IDE Netbeans
39. Installer
40. Internationalization Localization
41. Inversion of Control
42. Issue Tracking
43. J2EE
44. JBoss
45. JMS
46. JMX
47. Library
48. Mail Clients
49. Net
50. Parser
51. PDF
52. Portal
53. Profiler
54. Project Management
55. Report
56. RSS RDF
57. Rule Engine
58. Science
59. Scripting
60. Search Engine
61. Security
62. Sevlet Container
63. Source Control
64. Swing Library
65. Template Engine
66. Test Coverage
67. Testing
68. UML
69. Web Crawler
70. Web Framework
71. Web Mail
72. Web Server
73. Web Services
74. Web Services apache cxf 2.0.1
75. Web Services AXIS2
76. Wiki Engine
77. Workflow Engines
78. XML
79. XML UI
Java
Java Tutorial
Java Open Source
Jar File Download
Java Articles
Java Products
Java by API
Photoshop Tutorials
Maya Tutorials
Flash Tutorials
3ds-Max Tutorials
Illustrator Tutorials
GIMP Tutorials
C# / C Sharp
C# / CSharp Tutorial
C# / CSharp Open Source
ASP.Net
ASP.NET Tutorial
JavaScript DHTML
JavaScript Tutorial
JavaScript Reference
HTML / CSS
HTML CSS Reference
C / ANSI-C
C Tutorial
C++
C++ Tutorial
Ruby
PHP
Python
Python Tutorial
Python Open Source
SQL Server / T-SQL
SQL Server / T-SQL Tutorial
Oracle PL / SQL
Oracle PL/SQL Tutorial
PostgreSQL
SQL / MySQL
MySQL Tutorial
VB.Net
VB.Net Tutorial
Flash / Flex / ActionScript
VBA / Excel / Access / Word
XML
XML Tutorial
Microsoft Office PowerPoint 2007 Tutorial
Microsoft Office Excel 2007 Tutorial
Microsoft Office Word 2007 Tutorial
Java Source Code / Java Documentation » Portal » Open Portal » com.sun.portal.app.blog.provision 
Source Cross Referenced  Class Diagram Java Document (Java Doc) 


0001:        /*
0002:         * Copyright ? 2006 Sun Microsystems, Inc. All rights reserved.
0003:         *
0004:         * Sun Microsystems, Inc. has intellectual property rights relating to
0005:         * technology embodied in the product that is described in this document.
0006:         * In particular, and without limitation, these intellectual property
0007:         * rights may include one or more of the U.S. patents listed at
0008:         * http://www.sun.com/patents and one or more additional patents or
0009:         * pending patent applications in the U.S. and in other countries.
0010:         *
0011:         * U.S. Government Rights - Commercial software. Government users are subject
0012:         * to the Sun Microsystems, Inc. standard license agreement and applicable
0013:         * provisions of the FAR and its supplements. Use is subject to license terms.
0014:         * This distribution may include materials developed by third parties.
0015:         * Sun, Sun Microsystems, the Sun logo and Java are trademarks or registered
0016:         * trademarks of Sun Microsystems, Inc. in the U.S. and other countries.
0017:         */
0018:        package com.sun.portal.app.blog.provision;
0019:
0020:        import com.iplanet.sso.SSOToken;
0021:        import com.iplanet.sso.SSOTokenManager;
0022:        import com.iplanet.sso.SSOException;
0023:        import com.sun.portal.app.blog.BlogPortletException;
0024:        import com.sun.portal.app.blog.EntrySerializer;
0025:        import com.sun.portal.app.blog.password.PasswordGenerator;
0026:        import com.sun.portal.app.blog.Resources;
0027:        import com.sun.portal.app.blog.env.AbstractSearch;
0028:        import com.sun.portal.app.blog.env.PortletProvisionPrefs;
0029:        import com.sun.portal.app.blog.env.Prefs;
0030:        import com.sun.portal.app.blog.env.Search;
0031:        import com.sun.portal.app.blog.httpverb.Delete;
0032:        import com.sun.portal.app.blog.httpverb.Get;
0033:        import com.sun.portal.app.blog.httpverb.Post;
0034:        import com.sun.portal.app.blog.httpverb.HttpVerbException;
0035:        import com.sun.portal.app.blog.httpverb.Put;
0036:        import com.sun.portal.portlet.service.provision.GenericPortletProvisionListener;
0037:        import com.sun.portal.portlet.service.provision.PortletProvisionEvent;
0038:        import com.sun.portal.portlet.service.provision.PortletProvisionException;
0039:        import com.sun.portal.community.CommunityId;
0040:        import com.sun.syndication.feed.atom.Content;
0041:        import com.sun.syndication.feed.atom.Entry;
0042:        import com.sun.syndication.feed.atom.Feed;
0043:        import com.sun.syndication.feed.atom.Link;
0044:        import com.sun.syndication.io.FeedException;
0045:        import com.sun.syndication.io.WireFeedInput;
0046:        import java.io.ByteArrayInputStream;
0047:        import java.io.IOException;
0048:        import java.io.InputStream;
0049:        import java.io.UnsupportedEncodingException;
0050:        import java.net.MalformedURLException;
0051:        import java.net.URL;
0052:        import java.text.MessageFormat;
0053:        import java.util.Collections;
0054:        import java.util.Iterator;
0055:        import java.util.List;
0056:        import java.util.Locale;
0057:        import java.util.Set;
0058:        import java.util.TimeZone;
0059:        import java.util.HashSet;
0060:        import javax.servlet.http.HttpServletRequest;
0061:        import javax.servlet.http.HttpServletResponse;
0062:        import org.jdom.JDOMException;
0063:        import org.apache.roller.webservices.adminapi.sdk.MemberEntry;
0064:        import org.apache.roller.webservices.adminapi.sdk.MemberEntrySet;
0065:        import org.apache.roller.webservices.adminapi.sdk.UnexpectedRootElementException;
0066:        import org.apache.roller.webservices.adminapi.sdk.UserEntry;
0067:        import org.apache.roller.webservices.adminapi.sdk.UserEntrySet;
0068:        import org.apache.roller.webservices.adminapi.sdk.WeblogEntry;
0069:        import org.apache.roller.webservices.adminapi.sdk.WeblogEntrySet;
0070:        import org.xml.sax.InputSource;
0071:
0072:        public class BlogProvisioningListener extends
0073:                GenericPortletProvisionListener {
0074:            private static AbstractSearch search = AbstractSearch.getInstance();
0075:
0076:            public void init(javax.portlet.PortletContext context)
0077:                    throws PortletProvisionException {
0078:                super .init(context);
0079:            }
0080:
0081:            public void handleProvisionEvent(PortletProvisionEvent event)
0082:                    throws PortletProvisionException {
0083:                if (event.getType() == PortletProvisionEvent.EVENT_TYPE_CREATED) {
0084:                    doCreate(event);
0085:                } else if (event.getType() == PortletProvisionEvent.EVENT_TYPE_DESTROYED) {
0086:                    doPurge(event, true, true, true);
0087:                } else if ((event.getType() == PortletProvisionEvent.EVENT_TYPE_UNDELETED)
0088:                        || (event.getType() == PortletProvisionEvent.EVENT_TYPE_ENABLED)) {
0089:                    doEnable(event);
0090:                } else if ((event.getType() == PortletProvisionEvent.EVENT_TYPE_DELETED)
0091:                        || (event.getType() == PortletProvisionEvent.EVENT_TYPE_DISABLED)) {
0092:                    doDisable(event);
0093:                }
0094:            }
0095:
0096:            public void doCreate(PortletProvisionEvent ppe)
0097:                    throws PortletProvisionException {
0098:                boolean weblogCreated = false;
0099:                boolean userCreated = false;
0100:                boolean prefsSet = false;
0101:
0102:                try {
0103:                    ppe.getHttpServletRequest().getSession().invalidate();
0104:
0105:                    // grab this and hold onto it, we'll need it in a couple of place
0106:                    String pw = getWeblogUserPassword(ppe);
0107:
0108:                    //
0109:                    // be robust about this ...
0110:                    //
0111:
0112:                    //
0113:                    // 1. if the weblog user already exist, re-set its values
0114:                    // to those we expect
0115:                    // the weblog user is ours. make sure it exists and is created /
0116:                    // configured by us.
0117:                    //
0118:
0119:                    if (existsWeblogUser(ppe)) {
0120:                        resetWeblogUser(ppe, pw);
0121:                        setUserEnabled(ppe, true);
0122:                    } else {
0123:                        userCreated = true;
0124:                        createWeblogUser(ppe, pw);
0125:                    }
0126:
0127:                    //
0128:                    // 2. if the weblog already exists, don't try to re-create it
0129:                    // or remove it first or anything else. we support this situation.
0130:                    //
0131:
0132:                    WeblogEntry we;
0133:                    if (existsWeblog(ppe)) {
0134:                        we = getWeblog(ppe);
0135:                        // ensure that it is enabled
0136:                        setWeblogEnabled(ppe, true);
0137:                    } else {
0138:                        weblogCreated = true;
0139:                        we = createWeblog(ppe);
0140:                    }
0141:
0142:                    //
0143:                    // 3. make sure that the weblog user is an ADMIN in the community
0144:                    // this is *normally* taken care of by simply creating the community
0145:                    // w/ the weblog user set to the creating user ... however, if the
0146:                    // weblog already exists, we cannot be sure of its state. typically,
0147:                    // the permissions check succeeds and there's nothing to do
0148:                    //
0149:
0150:                    if (!weblogUserHasPermission(ppe,
0151:                            MemberEntry.Permissions.ADMIN)) {
0152:                        addWeblogUserMembership(ppe,
0153:                                MemberEntry.Permissions.ADMIN);
0154:                    }
0155:
0156:                    // set up preferences to access weblog with ghost user
0157:                    // this allows the portlet to work after community creation
0158:                    // user is expected to edit the portlet and either
0159:                    // create a new user, or enter existing credentials
0160:                    Prefs prefs = new PortletProvisionPrefs(ppe
0161:                            .getPortletProvisionPreferences("member"));
0162:                    prefs.setHandle(getWeblogHandle(ppe));
0163:                    prefs.setAppEntriesUrl(we.getAppEntriesUrl());
0164:                    prefs.setAppUserName(getWeblogUserName(ppe));
0165:                    prefs.setAppUserPassword(pw);
0166:                    prefs.store();
0167:                    prefsSet = true;
0168:
0169:                    // index weblog into search server
0170:                    // NOTE: we have to do this AFTER we set the APP
0171:                    // credentials, as it gets the weblog URL and title
0172:                    // from the APP service
0173:                    Feed feed = getWeblogFeed(ppe);
0174:                    indexWeblog(ppe, feed);
0175:
0176:                    // post a nice welcome message into the community weblog
0177:                    postWelcome(ppe, feed, we.getAppEntriesUrl(),
0178:                            getWeblogUserName(ppe), pw);
0179:                } catch (PortletProvisionException ppex) {
0180:                    // TODO: it is not technically correct to purge here
0181:                    // we should only purge if we created it in the first place
0182:                    // the resource might have already existed
0183:                    doPurge(ppe, weblogCreated, userCreated, prefsSet);
0184:                    throw ppex;
0185:                } catch (BlogPortletException bpe) {
0186:                    doPurge(ppe, weblogCreated, userCreated, prefsSet);
0187:                    throw new PortletProvisionException(
0188:                            "BlogProvisioningListener", bpe);
0189:                }
0190:            }
0191:
0192:            private void doPurge(PortletProvisionEvent ppe,
0193:                    boolean purgeWeblog, boolean purgeUser, boolean clearPrefs)
0194:                    throws PortletProvisionException {
0195:                ppe.getHttpServletRequest().getSession().invalidate();
0196:
0197:                try {
0198:                    Feed feed = getWeblogFeed(ppe);
0199:                    deindexEntries(ppe, feed);
0200:                    deindexWeblog(ppe, feed);
0201:                } catch (PortletProvisionException ppe1) {
0202:                    // nothing
0203:                }
0204:
0205:                // only try to delete the weblog if it exists
0206:                if (purgeWeblog && existsWeblog(ppe)) {
0207:                    try {
0208:                        deleteWeblog(ppe);
0209:                    } catch (PortletProvisionException ppe2) {
0210:                        // nothing
0211:                    }
0212:                }
0213:
0214:                // only delete the weblog user if it exists
0215:                if (purgeUser && existsWeblogUser(ppe)) {
0216:                    try {
0217:                        deleteWeblogUser(ppe);
0218:                    } catch (PortletProvisionException ppe3) {
0219:                        // nothing
0220:                    }
0221:                }
0222:
0223:                if (clearPrefs) {
0224:                    try {
0225:                        Prefs prefs = new PortletProvisionPrefs(ppe
0226:                                .getPortletProvisionPreferences("member"));
0227:                        prefs.setHandle("");
0228:                        prefs.setAppEntriesUrl("");
0229:                        prefs.setAppUserName("");
0230:                        prefs.setAppUserPassword("");
0231:                    } catch (BlogPortletException bpe) {
0232:                        // nothing
0233:                    }
0234:                }
0235:            }
0236:
0237:            public void doDisable(PortletProvisionEvent ppe)
0238:                    throws PortletProvisionException {
0239:                ppe.getHttpServletRequest().getSession().invalidate();
0240:
0241:                try {
0242:                    Feed feed = getWeblogFeed(ppe);
0243:                    deindexEntries(ppe, feed);
0244:                    deindexWeblog(ppe, feed);
0245:                } catch (PortletProvisionException ppe3) {
0246:                    // nothing
0247:                }
0248:
0249:                // only try to disable the weblog if it exists
0250:                if (existsWeblog(ppe)) {
0251:                    try {
0252:                        setWeblogEnabled(ppe, false);
0253:                    } catch (PortletProvisionException ppe3) {
0254:                        // nothing
0255:                    }
0256:
0257:                }
0258:
0259:                // only disable the weblog user if it exists
0260:                if (existsWeblogUser(ppe)) {
0261:                    try {
0262:                        setUserEnabled(ppe, false);
0263:                    } catch (PortletProvisionException ppe3) {
0264:                        // nothing
0265:                    }
0266:
0267:                }
0268:            }
0269:
0270:            public void doEnable(PortletProvisionEvent ppe)
0271:                    throws PortletProvisionException {
0272:                ppe.getHttpServletRequest().getSession().invalidate();
0273:
0274:                setUserEnabled(ppe, true);
0275:                setWeblogEnabled(ppe, true);
0276:
0277:                Feed feed = getWeblogFeed(ppe);
0278:                indexEntries(ppe, feed);
0279:                indexWeblog(ppe, feed);
0280:            }
0281:
0282:            private void addWeblogUserMembership(PortletProvisionEvent ppe,
0283:                    String perm) throws PortletProvisionException {
0284:                try {
0285:                    Prefs prefs = new PortletProvisionPrefs(ppe
0286:                            .getPortletProvisionPreferences("member"));
0287:
0288:                    MemberEntry memberEntry = new MemberEntry(
0289:                            getWeblogHandle(ppe), getWeblogUserName(ppe), prefs
0290:                                    .getAappUrl());
0291:                    memberEntry.setPermission(perm);
0292:
0293:                    MemberEntrySet mes = new MemberEntrySet(prefs.getAappUrl());
0294:                    mes.setEntries(new MemberEntry[] { memberEntry });
0295:
0296:                    String url = mes.getHref();
0297:                    String body = mes.toString();
0298:
0299:                    post(url, prefs.getAappUserName(), prefs
0300:                            .getAappUserPassword(), body,
0301:                            "application/xml; utf8");
0302:                } catch (BlogPortletException bpe) {
0303:                    throw new PortletProvisionException(
0304:                            "BlogProvisioningListener", bpe);
0305:                }
0306:
0307:            }
0308:
0309:            private boolean existsWeblogUser(PortletProvisionEvent ppe)
0310:                    throws PortletProvisionException {
0311:                try {
0312:                    Prefs prefs = new PortletProvisionPrefs(ppe
0313:                            .getPortletProvisionPreferences("member"));
0314:
0315:                    UserEntry ue = new UserEntry(getWeblogUserName(ppe), prefs
0316:                            .getAappUrl());
0317:                    String url = ue.getHref();
0318:
0319:                    return exists(url, prefs.getAappUserName(), prefs
0320:                            .getAappUserPassword());
0321:                } catch (BlogPortletException bpe) {
0322:                    throw new PortletProvisionException(
0323:                            "BlogProvisioningListener", bpe);
0324:                }
0325:
0326:            }
0327:
0328:            private boolean existsWeblog(PortletProvisionEvent ppe)
0329:                    throws PortletProvisionException {
0330:                try {
0331:                    Prefs prefs = new PortletProvisionPrefs(ppe
0332:                            .getPortletProvisionPreferences("member"));
0333:
0334:                    WeblogEntry we = new WeblogEntry(getWeblogHandle(ppe),
0335:                            prefs.getAappUrl());
0336:                    String url = we.getHref();
0337:
0338:                    return exists(url, prefs.getAappUserName(), prefs
0339:                            .getAappUserPassword());
0340:                } catch (BlogPortletException bpe) {
0341:                    throw new PortletProvisionException(
0342:                            "BlogProvisioningListener", bpe);
0343:                }
0344:
0345:            }
0346:
0347:            private void deleteWeblogUser(PortletProvisionEvent ppe)
0348:                    throws PortletProvisionException {
0349:                try {
0350:                    Prefs prefs = new PortletProvisionPrefs(ppe
0351:                            .getPortletProvisionPreferences("member"));
0352:
0353:                    UserEntry ue = new UserEntry(getWeblogUserName(ppe), prefs
0354:                            .getAappUrl());
0355:                    String url = ue.getHref();
0356:
0357:                    delete(url, prefs.getAappUserName(), prefs
0358:                            .getAappUserPassword());
0359:                } catch (BlogPortletException bpe) {
0360:                    throw new PortletProvisionException(
0361:                            "BlogProvisioningListener", bpe);
0362:                }
0363:
0364:            }
0365:
0366:            private void delete(String url, String user, String pw)
0367:                    throws PortletProvisionException {
0368:                try {
0369:                    Delete delete = new Delete(new URL(url), user, pw);
0370:                    int status = delete.execute();
0371:                    if (!delete.success()) {
0372:                        throw new PortletProvisionException(
0373:                                "BlogProvisioningListener",
0374:                                "DELETE failed, http status code=" + status);
0375:                    }
0376:                } catch (MalformedURLException mfue) {
0377:                    throw new PortletProvisionException(
0378:                            "BlogProvisioningListener", mfue);
0379:                } catch (HttpVerbException ve) {
0380:                    throw new PortletProvisionException(
0381:                            "BlogProvisioningListener", ve);
0382:                }
0383:            }
0384:
0385:            private InputStream get(String url, String user, String pw)
0386:                    throws PortletProvisionException {
0387:                try {
0388:                    Get get = new Get(new URL(url), user, pw);
0389:                    int status = get.execute();
0390:                    if (!get.success()) {
0391:                        throw new PortletProvisionException(
0392:                                "BlogProvisioningListener",
0393:                                "GET failed, http status code=" + status);
0394:                    }
0395:                    InputStream bodyStream = get.getResponseBody();
0396:                    return bodyStream;
0397:                } catch (MalformedURLException mfue) {
0398:                    throw new PortletProvisionException(
0399:                            "BlogProvisioningListener", mfue);
0400:                } catch (HttpVerbException ve) {
0401:                    throw new PortletProvisionException(
0402:                            "BlogProvisioningListener", ve);
0403:                }
0404:            }
0405:
0406:            private void deleteWeblog(PortletProvisionEvent ppe)
0407:                    throws PortletProvisionException {
0408:                try {
0409:                    Prefs prefs = new PortletProvisionPrefs(ppe
0410:                            .getPortletProvisionPreferences("member"));
0411:
0412:                    WeblogEntry we = new WeblogEntry(getWeblogHandle(ppe),
0413:                            prefs.getAappUrl());
0414:                    String url = we.getHref();
0415:
0416:                    delete(url, prefs.getAappUserName(), prefs
0417:                            .getAappUserPassword());
0418:                } catch (BlogPortletException bpe) {
0419:                    throw new PortletProvisionException(
0420:                            "BlogProvisioningListener", bpe);
0421:                }
0422:            }
0423:
0424:            private void setWeblogEnabled(PortletProvisionEvent ppe,
0425:                    boolean enabled) throws PortletProvisionException {
0426:                try {
0427:                    Prefs prefs = new PortletProvisionPrefs(ppe
0428:                            .getPortletProvisionPreferences("member"));
0429:
0430:                    WeblogEntry we = new WeblogEntry(getWeblogHandle(ppe),
0431:                            prefs.getAappUrl());
0432:                    we.setEnabled(Boolean.valueOf(enabled));
0433:
0434:                    WeblogEntrySet wes = new WeblogEntrySet(prefs.getAappUrl());
0435:                    wes.setEntries(new WeblogEntry[] { we });
0436:
0437:                    String url = wes.getHref();
0438:                    String body = wes.toString();
0439:
0440:                    put(url, prefs.getAappUserName(), prefs
0441:                            .getAappUserPassword(), body,
0442:                            "application/xml; utf8");
0443:                } catch (BlogPortletException bpe) {
0444:                    throw new PortletProvisionException(
0445:                            "BlogProvisioningListener", bpe);
0446:                }
0447:            }
0448:
0449:            private void setUserEnabled(PortletProvisionEvent ppe,
0450:                    boolean enabled) throws PortletProvisionException {
0451:                try {
0452:                    Prefs prefs = new PortletProvisionPrefs(ppe
0453:                            .getPortletProvisionPreferences("member"));
0454:
0455:                    UserEntry ue = new UserEntry(getWeblogUserName(ppe), prefs
0456:                            .getAappUrl());
0457:                    ue.setEnabled(Boolean.valueOf(enabled));
0458:
0459:                    UserEntrySet ues = new UserEntrySet(prefs.getAappUrl());
0460:                    ues.setEntries(new UserEntry[] { ue });
0461:
0462:                    String url = ues.getHref();
0463:                    String body = ues.toString();
0464:
0465:                    put(url, prefs.getAappUserName(), prefs
0466:                            .getAappUserPassword(), body,
0467:                            "application/xml; utf8");
0468:                } catch (BlogPortletException bpe) {
0469:                    throw new PortletProvisionException(
0470:                            "BlogProvisioningListener", bpe);
0471:                }
0472:            }
0473:
0474:            private WeblogEntry createWeblog(PortletProvisionEvent ppe)
0475:                    throws PortletProvisionException {
0476:                try {
0477:                    Prefs prefs = new PortletProvisionPrefs(ppe
0478:                            .getPortletProvisionPreferences("member"));
0479:                    AbstractSearch srch = search.getNewInstance(prefs);
0480:                    srch.setHttpRequest(ppe.getHttpServletRequest());
0481:
0482:                    WeblogEntry we = new WeblogEntry(getWeblogHandle(ppe),
0483:                            prefs.getAappUrl());
0484:
0485:                    we.setName(getWeblogName(ppe));
0486:                    we.setDescription(getWeblogDescription(ppe));
0487:                    we.setCreatingUser(getWeblogUserName(ppe));
0488:                    we.setEmailAddress("");
0489:                    we.setLocale(getLocale(ppe).toString());
0490:                    we.setTimezone(getTimeZone(ppe).getID());
0491:
0492:                    WeblogEntrySet wes = new WeblogEntrySet(prefs.getAappUrl());
0493:                    wes.setEntries(new WeblogEntry[] { we });
0494:
0495:                    String url = wes.getHref();
0496:                    String body = wes.toString();
0497:
0498:                    try {
0499:                        InputStream responseStream = post(url, prefs
0500:                                .getAappUserName(),
0501:                                prefs.getAappUserPassword(), body,
0502:                                "application/xml; utf8");
0503:                        WeblogEntrySet wesResponse = new WeblogEntrySet(
0504:                                responseStream, prefs.getAappUrl());
0505:                        if (wesResponse.getEntries() == null
0506:                                && wesResponse.getEntries().length == 0) {
0507:                            throw new PortletProvisionException(
0508:                                    "BlogProvisioningListener",
0509:                                    "failed to get response after weblog creation");
0510:                        }
0511:
0512:                        return (WeblogEntry) wesResponse.getEntries()[0];
0513:                    } catch (JDOMException je) {
0514:                        throw new PortletProvisionException(
0515:                                "BlogProvisioningListener", je);
0516:                    } catch (IOException ioe) {
0517:                        throw new PortletProvisionException(
0518:                                "BlogProvisioningListener", ioe);
0519:                    } catch (UnexpectedRootElementException mee) {
0520:                        throw new PortletProvisionException(
0521:                                "BlogProvisioningListener", mee);
0522:                    }
0523:                } catch (BlogPortletException bpe) {
0524:                    throw new PortletProvisionException(
0525:                            "BlogProvisioningListener", bpe);
0526:                }
0527:            }
0528:
0529:            private void indexWeblog(PortletProvisionEvent ppe, Feed feed)
0530:                    throws PortletProvisionException {
0531:                String weblogLink = getWeblogLink(feed);
0532:                String title = getWeblogName(ppe);
0533:                String content = getWeblogDescription(ppe);
0534:
0535:                // if we can't get the link or the title, we cannot index
0536:                // feed is not required to give us those
0537:                if (weblogLink != null && weblogLink.length() > 0
0538:                        && title != null && title.length() > 0) {
0539:                    insertSearch(ppe, weblogLink, title, content);
0540:                }
0541:            }
0542:
0543:            private void deindexWeblog(PortletProvisionEvent ppe, Feed feed)
0544:                    throws PortletProvisionException {
0545:                String weblogLink = getWeblogLink(feed);
0546:
0547:                // if we can't get the link, we cannot deindex
0548:                // feed is not required to give us those
0549:                if (weblogLink != null && weblogLink.length() > 0) {
0550:                    deleteSearch(ppe, weblogLink);
0551:                }
0552:            }
0553:
0554:            private void indexEntry(PortletProvisionEvent ppe, Feed feed,
0555:                    Entry entry) throws PortletProvisionException {
0556:                String entryLink = getEntryLink(entry);
0557:                String title = entry.getTitle();
0558:                String content = ((Content) entry.getContents().get(0))
0559:                        .getValue();
0560:
0561:                // if we can't get the link or the title, we cannot index
0562:                // feed is not required to give us those
0563:                if (entryLink != null && entryLink.length() > 0
0564:                        && title != null && title.length() > 0) {
0565:                    insertSearch(ppe, entryLink, title, content);
0566:                }
0567:            }
0568:
0569:            private void deindexEntries(PortletProvisionEvent ppe, Feed feed)
0570:                    throws PortletProvisionException {
0571:                List entries = feed.getEntries();
0572:                if (entries != null) {
0573:                    for (Iterator i = entries.iterator(); i.hasNext();) {
0574:                        Entry entry = (Entry) i.next();
0575:                        String entryLink = getEntryLink(entry);
0576:                        if (entryLink != null && entryLink.length() > 0) {
0577:                            deleteSearch(ppe, entryLink);
0578:                        }
0579:                    }
0580:                }
0581:            }
0582:
0583:            private void indexEntries(PortletProvisionEvent ppe, Feed feed)
0584:                    throws PortletProvisionException {
0585:                List entries = feed.getEntries();
0586:                if (entries != null) {
0587:                    for (Iterator i = entries.iterator(); i.hasNext();) {
0588:                        Entry entry = (Entry) i.next();
0589:                        indexEntry(ppe, feed, entry);
0590:                    }
0591:                }
0592:            }
0593:
0594:            private void insertSearch(PortletProvisionEvent ppe, String url,
0595:                    String title, String content)
0596:                    throws PortletProvisionException {
0597:                try {
0598:                    Prefs prefs = new PortletProvisionPrefs(ppe
0599:                            .getPortletProvisionPreferences("member"));
0600:                    AbstractSearch srch = search.getNewInstance(prefs);
0601:                    srch.setHttpRequest(ppe.getHttpServletRequest());
0602:
0603:                    srch.insert(url, title, content);
0604:                } catch (BlogPortletException bpe) {
0605:                    throw new PortletProvisionException(
0606:                            "BlogProvisioningListener", bpe);
0607:                }
0608:            }
0609:
0610:            private void deleteSearch(PortletProvisionEvent ppe, String url)
0611:                    throws PortletProvisionException {
0612:                try {
0613:                    Prefs prefs = new PortletProvisionPrefs(ppe
0614:                            .getPortletProvisionPreferences("member"));
0615:                    AbstractSearch srch = search.getNewInstance(prefs);
0616:                    srch.setHttpRequest(ppe.getHttpServletRequest());
0617:
0618:                    srch.delete(url);
0619:                } catch (BlogPortletException bpe) {
0620:                    throw new PortletProvisionException(
0621:                            "BlogProvisioningListener", bpe);
0622:                }
0623:            }
0624:
0625:            private WeblogEntry getWeblog(PortletProvisionEvent ppe)
0626:                    throws PortletProvisionException {
0627:                try {
0628:                    Prefs prefs = new PortletProvisionPrefs(ppe
0629:                            .getPortletProvisionPreferences("member"));
0630:
0631:                    WeblogEntry we = new WeblogEntry(getWeblogHandle(ppe),
0632:                            prefs.getAappUrl());
0633:
0634:                    String url = we.getHref();
0635:
0636:                    InputStream responseStream = get(url, prefs
0637:                            .getAappUserName(), prefs.getAappUserPassword());
0638:                    WeblogEntrySet wesResponse = new WeblogEntrySet(
0639:                            responseStream, prefs.getAappUrl());
0640:                    if (wesResponse.getEntries() == null
0641:                            && wesResponse.getEntries().length == 0) {
0642:                        throw new PortletProvisionException(
0643:                                "BlogProvisioningListener",
0644:                                "failed to get response after weblog creation");
0645:                    }
0646:                    return (WeblogEntry) wesResponse.getEntries()[0];
0647:                } catch (JDOMException je) {
0648:                    throw new PortletProvisionException(
0649:                            "BlogProvisioningListener", je);
0650:                } catch (IOException ioe) {
0651:                    throw new PortletProvisionException(
0652:                            "BlogProvisioningListener", ioe);
0653:                } catch (UnexpectedRootElementException mee) {
0654:                    throw new PortletProvisionException(
0655:                            "BlogProvisioningListener", mee);
0656:                } catch (BlogPortletException bpe) {
0657:                    throw new PortletProvisionException(
0658:                            "BlogProvisioningListener", bpe);
0659:                }
0660:            }
0661:
0662:            private Feed getWeblogFeed(PortletProvisionEvent ppe)
0663:                    throws PortletProvisionException {
0664:                try {
0665:                    Prefs prefs = new PortletProvisionPrefs(ppe
0666:                            .getPortletProvisionPreferences("member"));
0667:                    InputStream is = get(prefs.getAppEntriesUrl(), prefs
0668:                            .getAppUserName(), prefs.getAppUserPassword());
0669:
0670:                    InputSource src = new InputSource(is);
0671:                    WireFeedInput input = new WireFeedInput();
0672:                    Feed feed = (Feed) input.build(src);
0673:
0674:                    return feed;
0675:                } catch (BlogPortletException bpe) {
0676:                    throw new PortletProvisionException(
0677:                            "BlogProvisioningListener", bpe);
0678:                } catch (FeedException fe) {
0679:                    throw new PortletProvisionException(
0680:                            "BlogProvisioningListener", fe);
0681:                }
0682:            }
0683:
0684:            private String getWeblogLink(Feed feed)
0685:                    throws PortletProvisionException {
0686:                List altLinks = feed.getAlternateLinks();
0687:                if (altLinks == null || altLinks.size() == 0) {
0688:                    return null;
0689:                }
0690:
0691:                Link link = (Link) altLinks.get(0);
0692:                return link.getHref();
0693:            }
0694:
0695:            private String getEntryLink(Entry entry)
0696:                    throws PortletProvisionException {
0697:                List altLinks = entry.getAlternateLinks();
0698:                if (altLinks == null || altLinks.size() == 0) {
0699:                    return null;
0700:                }
0701:
0702:                Link link = (Link) altLinks.get(0);
0703:                return link.getHref();
0704:            }
0705:
0706:            private void createWeblogUser(PortletProvisionEvent ppe,
0707:                    String password) throws PortletProvisionException {
0708:                try {
0709:                    Prefs prefs = new PortletProvisionPrefs(ppe
0710:                            .getPortletProvisionPreferences("member"));
0711:
0712:                    UserEntry userEntry = new UserEntry(getWeblogUserName(ppe),
0713:                            prefs.getAappUrl());
0714:
0715:                    userEntry.setFullName(getWeblogUserFullName(ppe));
0716:                    userEntry.setPassword(password);
0717:                    userEntry.setLocale(getLocale(ppe).toString());
0718:                    userEntry.setTimezone(getTimeZone(ppe).getID());
0719:                    userEntry.setEmailAddress("");
0720:
0721:                    UserEntrySet ues = new UserEntrySet(prefs.getAappUrl());
0722:                    ues.setEntries(new UserEntry[] { userEntry });
0723:
0724:                    String url = ues.getHref();
0725:                    String body = ues.toString();
0726:
0727:                    post(url, prefs.getAappUserName(), prefs
0728:                            .getAappUserPassword(), body,
0729:                            "application/xml; utf8");
0730:                } catch (BlogPortletException bpe) {
0731:                    throw new PortletProvisionException(
0732:                            "BlogProvisioningListener", bpe);
0733:                }
0734:            }
0735:
0736:            private void resetWeblogUser(PortletProvisionEvent ppe,
0737:                    String password) throws PortletProvisionException {
0738:                try {
0739:                    Prefs prefs = new PortletProvisionPrefs(ppe
0740:                            .getPortletProvisionPreferences("member"));
0741:
0742:                    UserEntry userEntry = new UserEntry(getWeblogUserName(ppe),
0743:                            prefs.getAappUrl());
0744:
0745:                    userEntry.setFullName(getWeblogUserFullName(ppe));
0746:                    userEntry.setPassword(password);
0747:                    userEntry.setLocale(getLocale(ppe).toString());
0748:                    userEntry.setTimezone(getTimeZone(ppe).getID());
0749:                    userEntry.setEmailAddress("");
0750:
0751:                    UserEntrySet ues = new UserEntrySet(prefs.getAappUrl());
0752:                    ues.setEntries(new UserEntry[] { userEntry });
0753:
0754:                    String url = ues.getHref();
0755:                    String body = ues.toString();
0756:
0757:                    put(url, prefs.getAappUserName(), prefs
0758:                            .getAappUserPassword(), body,
0759:                            "application/xml; utf8");
0760:                } catch (BlogPortletException bpe) {
0761:                    throw new PortletProvisionException(
0762:                            "BlogProvisioningListener", bpe);
0763:                }
0764:            }
0765:
0766:            private boolean weblogUserHasPermission(PortletProvisionEvent ppe,
0767:                    String perm) throws PortletProvisionException {
0768:                Set perms = getWeblogUserPermissions(ppe);
0769:                boolean contains = perms.contains(perm);
0770:
0771:                return contains;
0772:            }
0773:
0774:            private Set getWeblogUserPermissions(PortletProvisionEvent ppe)
0775:                    throws PortletProvisionException {
0776:                try {
0777:                    Prefs prefs = new PortletProvisionPrefs(ppe
0778:                            .getPortletProvisionPreferences("member"));
0779:
0780:                    MemberEntry me = new MemberEntry(getWeblogHandle(ppe),
0781:                            getWeblogUserName(ppe), prefs.getAappUrl());
0782:                    String url = me.getHref();
0783:
0784:                    try {
0785:                        Get get = new Get(new URL(url),
0786:                                prefs.getAappUserName(), prefs
0787:                                        .getAappUserPassword());
0788:                        int status = get.execute();
0789:                        if (!get.success()) {
0790:                            return Collections.EMPTY_SET;
0791:                        }
0792:                        InputStream bodyStream = get.getResponseBody();
0793:                        MemberEntrySet mes = new MemberEntrySet(bodyStream,
0794:                                prefs.getAappUrl());
0795:                        org.apache.roller.webservices.adminapi.sdk.Entry[] entries = mes
0796:                                .getEntries();
0797:                        Set perms = null;
0798:                        if (entries != null) {
0799:                            perms = new HashSet();
0800:                            for (int i = 0; i < entries.length; i++) {
0801:                                MemberEntry entry = (MemberEntry) entries[i];
0802:                                perms.add(entry.getPermission());
0803:                            }
0804:                        }
0805:
0806:                        return perms;
0807:                    } catch (MalformedURLException mfue) {
0808:                        throw new PortletProvisionException(
0809:                                "BlogProvisioningListener", mfue);
0810:                    } catch (HttpVerbException ve) {
0811:                        throw new PortletProvisionException(
0812:                                "BlogProvisioningListener", ve);
0813:                    } catch (JDOMException je) {
0814:                        throw new PortletProvisionException(
0815:                                "BlogProvisioningListener", je);
0816:                    } catch (IOException ioe) {
0817:                        throw new PortletProvisionException(
0818:                                "BlogProvisioningListener", ioe);
0819:                    } catch (UnexpectedRootElementException uree) {
0820:                        throw new PortletProvisionException(
0821:                                "BlogProvisioningListener", uree);
0822:                    }
0823:                } catch (BlogPortletException bpe) {
0824:                    throw new PortletProvisionException(
0825:                            "BlogProvisioningListener", bpe);
0826:                }
0827:            }
0828:
0829:            private boolean exists(String url, String user, String pw)
0830:                    throws PortletProvisionException {
0831:                try {
0832:                    Get get = new Get(new URL(url), user, pw);
0833:                    int status = get.execute();
0834:                    if (status == HttpServletResponse.SC_NOT_FOUND) {
0835:                        return false;
0836:                    }
0837:
0838:                    if (get.success()) {
0839:                        return true;
0840:                    }
0841:
0842:                    throw new PortletProvisionException(
0843:                            "BlogProvisioningListener",
0844:                            "GET failed, http status code=" + status);
0845:                } catch (MalformedURLException mfue) {
0846:                    throw new PortletProvisionException(
0847:                            "BlogProvisioningListener", mfue);
0848:                } catch (HttpVerbException ve) {
0849:                    throw new PortletProvisionException(
0850:                            "BlogProvisioningListener", ve);
0851:                }
0852:            }
0853:
0854:            private InputStream post(String url, String user, String pw,
0855:                    String body, String contentType)
0856:                    throws PortletProvisionException {
0857:                try {
0858:                    InputStream bodyStream = new ByteArrayInputStream(body
0859:                            .getBytes("UTF-8"));
0860:
0861:                    Post post = new Post(new URL(url), user, pw, bodyStream,
0862:                            contentType);
0863:                    int status = post.execute();
0864:                    if (!post.success()) {
0865:                        throw new PortletProvisionException(
0866:                                "BlogProvisioningListener",
0867:                                "POST failed, http status code=" + status);
0868:                    }
0869:
0870:                    InputStream responseStream = post.getResponseBody();
0871:                    return responseStream;
0872:                } catch (UnsupportedEncodingException uec) {
0873:                    throw new PortletProvisionException(
0874:                            "BlogProvisioningListener", uec);
0875:                } catch (MalformedURLException mfue) {
0876:                    throw new PortletProvisionException(
0877:                            "BlogProvisioningListener", mfue);
0878:                } catch (HttpVerbException ve) {
0879:                    throw new PortletProvisionException(
0880:                            "BlogProvisioningListener", ve);
0881:                }
0882:            }
0883:
0884:            private InputStream put(String url, String user, String pw,
0885:                    String body, String contentType)
0886:                    throws PortletProvisionException {
0887:                try {
0888:                    InputStream bodyStream = new ByteArrayInputStream(body
0889:                            .getBytes("UTF-8"));
0890:
0891:                    Put put = new Put(new URL(url), user, pw, bodyStream,
0892:                            contentType);
0893:                    int status = put.execute();
0894:                    if (!put.success()) {
0895:                        throw new PortletProvisionException(
0896:                                "BlogProvisioningListener",
0897:                                "PUT failed, http status code=" + status);
0898:                    }
0899:
0900:                    InputStream responseStream = put.getResponseBody();
0901:                    return responseStream;
0902:                } catch (UnsupportedEncodingException uec) {
0903:                    throw new PortletProvisionException(
0904:                            "BlogProvisioningListener", uec);
0905:                } catch (MalformedURLException mfue) {
0906:                    throw new PortletProvisionException(
0907:                            "BlogProvisioningListener", mfue);
0908:                } catch (HttpVerbException ve) {
0909:                    throw new PortletProvisionException(
0910:                            "BlogProvisioningListener", ve);
0911:                }
0912:            }
0913:
0914:            private static String getWeblogUserName(PortletProvisionEvent ppe) {
0915:                return new CommunityId(ppe.getCommunityPrincipalId()).getName()
0916:                        + "shared";
0917:            }
0918:
0919:            private String getWeblogUserFullName(PortletProvisionEvent ppe) {
0920:                Resources resources = new Resources(
0921:                        "com.sun.portal.app.blog.provision.BlogProvisioningListener",
0922:                        getLocale(ppe));
0923:                String name = resources.get("fullName");
0924:
0925:                Object[] args = { new CommunityId(ppe.getCommunityPrincipalId())
0926:                        .getName() };
0927:
0928:                name = MessageFormat.format(name, args);
0929:
0930:                return name;
0931:            }
0932:
0933:            private String getWeblogUserPassword(PortletProvisionEvent ppe) {
0934:                PasswordGenerator pg = new PasswordGenerator(8);
0935:                return pg.get();
0936:            }
0937:
0938:            private static String getWeblogHandle(PortletProvisionEvent ppe) {
0939:                return new CommunityId(ppe.getCommunityPrincipalId()).getName();
0940:            }
0941:
0942:            private static String getWeblogName(PortletProvisionEvent ppe) {
0943:                Resources resources = new Resources(
0944:                        "com.sun.portal.app.blog.provision.BlogProvisioningListener",
0945:                        getLocale(ppe));
0946:                String name = resources.get("weblogName");
0947:
0948:                Object[] args = { new CommunityId(ppe.getCommunityPrincipalId())
0949:                        .getName() };
0950:
0951:                name = MessageFormat.format(name, args);
0952:
0953:                return name;
0954:            }
0955:
0956:            private static String getWeblogDescription(PortletProvisionEvent ppe) {
0957:                Resources resources = new Resources(
0958:                        "com.sun.portal.app.blog.provision.BlogProvisioningListener",
0959:                        getLocale(ppe));
0960:                String desc = resources.get("weblogDescription");
0961:
0962:                Object[] args = { new CommunityId(ppe.getCommunityPrincipalId())
0963:                        .getName() };
0964:
0965:                desc = MessageFormat.format(desc, args);
0966:
0967:                return desc;
0968:            }
0969:
0970:            private static Locale getLocale(PortletProvisionEvent ppe) {
0971:                HttpServletRequest req = ppe.getHttpServletRequest();
0972:                Locale locale = req.getLocale();
0973:                if (locale == null) {
0974:                    locale = Locale.getDefault();
0975:                }
0976:
0977:                return locale;
0978:            }
0979:
0980:            private TimeZone getTimeZone(PortletProvisionEvent ppe) {
0981:                return TimeZone.getDefault();
0982:            }
0983:
0984:            private void postWelcome(PortletProvisionEvent ppe, Feed feed,
0985:                    String url, String user, String pw)
0986:                    throws PortletProvisionException {
0987:                try {
0988:                    Prefs prefs = new PortletProvisionPrefs(ppe
0989:                            .getPortletProvisionPreferences("member"));
0990:                    Resources resources = new Resources(
0991:                            "com.sun.portal.app.blog.provision.BlogProvisioningListener",
0992:                            getLocale(ppe));
0993:                    String body = resources.get("welcomePostContent");
0994:
0995:                    Object[] args = {
0996:                            new CommunityId(ppe.getCommunityPrincipalId())
0997:                                    .getName(), user, prefs.getUserUrl() };
0998:
0999:                    body = MessageFormat.format(body, args);
1000:
1001:                    Entry entry = new Entry();
1002:                    String title = resources.get("welcomePostTitle");
1003:                    entry.setTitle(title);
1004:                    Content c = new Content();
1005:                    c.setValue(body);
1006:                    entry.setContents(Collections.singletonList(c));
1007:
1008:                    String content;
1009:
1010:                    try {
1011:                        content = EntrySerializer.toString(entry);
1012:                    } catch (FeedException fe) {
1013:                        throw new PortletProvisionException(
1014:                                "BlogProvisioningListener", fe);
1015:                    } catch (IOException ioe) {
1016:                        throw new PortletProvisionException(
1017:                                "BlogProvisioningListener", ioe);
1018:                    }
1019:
1020:                    InputStream is = post(url, user, pw, content,
1021:                            "application/atom+xml; utf8");
1022:                    Entry newEntry;
1023:
1024:                    try {
1025:                        newEntry = EntrySerializer.toEntry(is);
1026:                    } catch (FeedException fe) {
1027:                        throw new PortletProvisionException(
1028:                                "BlogProvisioningListener", fe);
1029:                    } catch (IOException ioe) {
1030:                        throw new PortletProvisionException(
1031:                                "BlogProvisioningListener", ioe);
1032:                    } catch (JDOMException je) {
1033:                        throw new PortletProvisionException(
1034:                                "BlogProvisioningListener", je);
1035:                    }
1036:
1037:                    // index
1038:                    indexEntry(ppe, feed, newEntry);
1039:                } catch (BlogPortletException bpe) {
1040:                    throw new PortletProvisionException(
1041:                            "BlogProvisioningListener", bpe);
1042:                }
1043:            }
1044:        }
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.