psmlupdateaction.java
来自「jetspeed源代码」· Java 代码 · 共 1,411 行 · 第 1/4 页
JAVA
1,411 行
/*
* Copyright 2000-2004 The Apache Software Foundation.
*
* Licensed 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.
*/
package org.apache.jetspeed.modules.actions.portlets;
// Turbine stuff
import org.apache.turbine.util.DynamicURI;
import org.apache.turbine.util.RunData;
import org.apache.turbine.util.StringUtils;
import org.apache.turbine.util.security.EntityExistsException;
import org.apache.turbine.services.TurbineServices;
import org.apache.turbine.services.servlet.TurbineServlet;
import org.apache.turbine.services.resources.ResourceService;
// Velocity Stuff
import org.apache.velocity.context.Context;
//Java
import java.io.File;
import java.io.FileWriter;
import java.io.FileReader;
import java.io.IOException;
import java.util.Iterator;
import java.util.Vector;
import java.util.StringTokenizer;
//Jetspeed
import org.apache.commons.lang.SerializationUtils;
import org.apache.jetspeed.modules.actions.portlets.security.SecurityConstants;
import org.apache.jetspeed.om.profile.Profile;
import org.apache.jetspeed.om.profile.ProfileLocator;
import org.apache.jetspeed.om.profile.QueryLocator;
import org.apache.jetspeed.om.profile.PSMLDocument;
import org.apache.jetspeed.om.profile.Portlets;
import org.apache.jetspeed.portal.portlets.VelocityPortlet;
import org.apache.jetspeed.services.Profiler;
import org.apache.jetspeed.services.Registry;
import org.apache.jetspeed.services.JetspeedSecurity;
import org.apache.jetspeed.services.PsmlManager;
import org.apache.jetspeed.services.logging.JetspeedLogFactoryService;
import org.apache.jetspeed.services.logging.JetspeedLogger;
import org.apache.jetspeed.util.template.JetspeedLink;
import org.apache.jetspeed.util.template.JetspeedLinkFactory;
import org.apache.jetspeed.services.resources.JetspeedResources;
import org.apache.jetspeed.services.psmlmanager.PsmlManagerService;
import org.apache.jetspeed.om.profile.BasePSMLDocument;
import org.apache.jetspeed.om.security.JetspeedUser;
import org.apache.jetspeed.om.security.Role;
import org.apache.jetspeed.om.security.Group;
//castor support
import org.exolab.castor.xml.MarshalException;
import org.exolab.castor.xml.Marshaller;
import org.exolab.castor.xml.Unmarshaller;
import org.exolab.castor.xml.ValidationException;
import org.exolab.castor.mapping.Mapping;
import org.exolab.castor.mapping.MappingException;
import org.xml.sax.InputSource;
// serialization support
import org.apache.xml.serialize.Serializer;
import org.apache.xml.serialize.XMLSerializer;
import org.apache.xml.serialize.OutputFormat;
/**
* This action enables to update the psml entries
*
* @author <a href="mailto:david@apache.org">David Sean Taylor</a>
* @version $Id: PsmlUpdateAction.java,v 1.18 2004/03/31 04:49:10 morciuch Exp $
*/
public class PsmlUpdateAction extends SecureVelocityPortletAction
{
protected static final String PSML_REFRESH_FLAG = "psmlRefreshFlag";
protected static final String TRUE = "true";
protected static final String FALSE = "false";
protected static final String CATEGORY_NAME = "categoryName";
protected static final String CATEGORY_VALUE = "categoryValue";
protected static final String COPY_FROM = "copyFrom";
protected static final String COPY_TO = "copyTo";
protected static final String TEMP_LOCATOR = "tempLocator";
protected static final String PSML_UPDATE_PANE = "PsmlForm";
/**
* Static initialization of the logger for this class
*/
private static final JetspeedLogger logger = JetspeedLogFactoryService.getLogger(PsmlUpdateAction.class.getName());
/**
* Subclasses must override this method to provide default behavior
* for the portlet action
*/
/**
* Build the normal state content for this portlet.
*
* @param portlet The velocity-based portlet that is being built.
* @param context The velocity context for this request.
* @param rundata The turbine rundata context for this request.
*/
protected void buildNormalContext( VelocityPortlet portlet,
Context context,
RunData rundata )
{
try
{
//
// if there was an error, display the message
//
String msgid = rundata.getParameters().getString(SecurityConstants.PARAM_MSGID);
if (msgid != null)
{
int id = Integer.parseInt(msgid);
if (id < SecurityConstants.MESSAGES.length)
context.put(SecurityConstants.PARAM_MSG, SecurityConstants.MESSAGES[id]);
// get the bad entered data and put it back for convenient update
ProfileLocator locator = (ProfileLocator)rundata.getUser().getTemp(TEMP_LOCATOR);
if (locator != null)
context.put("profile", Profiler.createProfile(locator));
}
String mode = rundata.getParameters().getString(SecurityConstants.PARAM_MODE);
context.put(SecurityConstants.PARAM_MODE, mode);
String path = rundata.getParameters().getString(SecurityConstants.PARAM_ENTITY_ID);
if(mode != null && mode.equals(SecurityConstants.PARAM_MODE_DELETE))
{
ProfileLocator locator = Profiler.createLocator();
locator.createFromPath(path);
Profile profile = Profiler.getProfile(locator);
if (profile != null)
{
rundata.getUser().setTemp(TEMP_LOCATOR, locator);
context.put("profile", profile);
}
else
logger.error("Profile for Path:"+path+" Not Found!");
}
if(mode != null && mode.equals(SecurityConstants.PARAM_MODE_INSERT))
{
org.apache.jetspeed.om.registry.Registry mediaTypes = Registry.get(Registry.MEDIA_TYPE);
context.put("mediaTypes", mediaTypes.listEntryNames());
if (msgid == null)
{
if(path == null)
{
context.put(CATEGORY_NAME, "user");
context.put("categoryValue", "anon");
context.put("copyFrom", "user/anon/media-type/html/page/default.psml");
}
else
{
ProfileLocator tmpLocator = Profiler.createLocator();
tmpLocator.createFromPath(path);
Profile profile = Profiler.getProfile(tmpLocator);
if (profile != null)
{
rundata.getUser().setTemp(TEMP_LOCATOR, tmpLocator);
context.put("profile", profile);
}
String categoryName = "group";
String categoryValue = tmpLocator.getGroupName();
if (categoryValue == null)
{
categoryName = "role";
categoryValue = tmpLocator.getRoleName();
if (categoryValue == null)
{
categoryName = "user";
categoryValue = tmpLocator.getUserName();
if (categoryValue == null)
{
categoryName = "user";
categoryValue = "anon";
}
}
}
context.put(CATEGORY_NAME, categoryName);
context.put("categoryValue", categoryValue);
context.put("copyFrom", path);
}
}
else
{
context.put(CATEGORY_NAME, rundata.getUser().getTemp(CATEGORY_NAME));
context.put(CATEGORY_VALUE, rundata.getUser().getTemp(CATEGORY_VALUE));
context.put(COPY_FROM, rundata.getUser().getTemp(COPY_FROM));
}
}
if(mode != null && mode.equals("export"))
{
if (msgid == null)
{
String tmpPath = JetspeedResources.getString(JetspeedResources.TEMP_DIRECTORY_KEY, "/tmp");
String exportPath = JetspeedResources.getString("psml.export.default.path",
TurbineServlet.getRealPath(tmpPath));
if(path == null)
{
context.put(COPY_TO, exportPath);
context.put(COPY_FROM,
Profiler.PARAM_USER +
File.separator +
Profiler.PARAM_ANON +
File.separator +
Profiler.PARAM_MEDIA_TYPE +
File.separator +
"html" +
File.separator +
Profiler.PARAM_PAGE +
File.separator +
Profiler.FULL_DEFAULT_PROFILE);
}
else
{
ProfileLocator tmpLocator = Profiler.createLocator();
tmpLocator.createFromPath(path);
Profile profile = Profiler.getProfile(tmpLocator);
if (profile != null)
{
rundata.getUser().setTemp(TEMP_LOCATOR, tmpLocator);
context.put("profile", profile);
}
String categoryName = Profiler.PARAM_GROUP;
String categoryValue = tmpLocator.getGroupName();
if (categoryValue == null)
{
categoryName = Profiler.PARAM_ROLE;
categoryValue = tmpLocator.getRoleName();
if (categoryValue == null)
{
categoryName = Profiler.PARAM_USER;
categoryValue = tmpLocator.getUserName();
if (categoryValue == null)
{
categoryName = Profiler.PARAM_USER;
categoryValue = Profiler.PARAM_ANON;
}
}
}
context.put(COPY_TO, exportPath + File.separator + tmpLocator.getName());
context.put(COPY_FROM, path);
}
}
else
{
context.put(COPY_TO, rundata.getUser().getTemp(COPY_TO));
context.put(COPY_FROM, rundata.getUser().getTemp(COPY_FROM));
}
}
if(mode != null && mode.equals("export_all"))
{
if (msgid == null)
{
// get the PSML Root Directory
ResourceService serviceConf = ((TurbineServices)TurbineServices.getInstance())
.getResources(PsmlManagerService.SERVICE_NAME);
String root = serviceConf.getString("root", "/WEB-INF/psml");
context.put(COPY_TO, TurbineServlet.getRealPath(root));
}
else
{
context.put(COPY_TO, rundata.getUser().getTemp(COPY_TO));
}
}
if(mode != null && mode.equals("import"))
{
org.apache.jetspeed.om.registry.Registry mediaTypes = Registry.get(Registry.MEDIA_TYPE);
context.put("mediaTypes", mediaTypes.listEntryNames());
if (msgid == null)
{
// get the PSML Root Directory
ResourceService serviceConf = ((TurbineServices)TurbineServices.getInstance())
.getResources(PsmlManagerService.SERVICE_NAME);
String root = serviceConf.getString("root", "/WEB-INF/psml");
root = TurbineServlet.getRealPath(root);
if(path == null)
{
context.put(CATEGORY_NAME, Profiler.PARAM_USER);
context.put("categoryValue", Profiler.PARAM_ANON);
context.put("copyFrom",
root +
File.separator +
Profiler.PARAM_USER +
File.separator +
Profiler.PARAM_ANON +
File.separator +
Profiler.PARAM_MEDIA_TYPE +
File.separator +
"html" +
File.separator +
Profiler.PARAM_PAGE +
File.separator +
Profiler.FULL_DEFAULT_PROFILE);
}
else
{
ProfileLocator tmpLocator = Profiler.createLocator();
tmpLocator.createFromPath(path);
Profile profile = Profiler.getProfile(tmpLocator);
if (profile != null)
{
rundata.getUser().setTemp(TEMP_LOCATOR, tmpLocator);
context.put("profile", profile);
}
String categoryName = Profiler.PARAM_GROUP;
String categoryValue = tmpLocator.getGroupName();
if (categoryValue == null)
{
categoryName = Profiler.PARAM_ROLE;
categoryValue = tmpLocator.getRoleName();
if (categoryValue == null)
{
categoryName = Profiler.PARAM_USER;
categoryValue = tmpLocator.getUserName();
if (categoryValue == null)
{
categoryName = Profiler.PARAM_USER;
categoryValue = Profiler.PARAM_ANON;
}
}
}
context.put(CATEGORY_NAME, categoryName);
context.put("categoryValue", categoryValue);
String filePath = this.mapLocatorToFile(tmpLocator);
context.put("copyFrom", root + File.separator + filePath.toString());
}
}
else
{
context.put(CATEGORY_NAME, rundata.getUser().getTemp(CATEGORY_NAME));
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?