Liferay integration Fedora实现方案:
1:在liferay中提供CMS的功能,可以进行文件的上传操作,主要支持文件类型有:
.bmp, .css, .doc, .dot, .gif, .gz, .htm, .html, .jpg, .js, .odb, .odf, .odg, .odp, .ods, .odt, .pdf, .png, .ppt, .rtf, .swf, .sxc, .sxi, .sxw, .tar, .tiff, .tgz, .txt, .vsd, .xls, .xml, .zip.
2:fedora提供WebService方法来对其内部进行访问及操作
通过以上 2 点,我们可以以 liferay 的 CMS 为基础,通过调用 fedora 的 WebService 接口来实现文件的存储以及查询等操作
Liferay integration Fedora实现代码:
涉及修改liferay中的文件如下:
实现删除功能修改文件:
com.liferay.documentlibrary.service.impl.DLServiceImpl.java
实现增,查,改功能修改文件:
com.liferay.documentlibrary.service.impl.DLLocalServiceImpl.java
com.liferay.documentlibrary.util.IndexerImpl.java
新增文件:
包com.newegg中全部
具体开发步骤:
从Sourceforge下载liferay的源代码liferay-portal-src- 4.3.0 .zip,解压至F:/liferay/portal目录
新建eclipse工程portal将Workspace设置为F:/liferay
Eclipse自动倒入portal工程文件,生成如下图:
修改portal目录下配置文件app.server.properties修改为:
## Server Type
app.server.type=tomcat
## Server Directory --此处为本机liferay根目录
app.server.parent.dir=G:/liferayportalapp
## Tomcat
app.server.tomcat.version=5.5
app.server.tomcat.dir=${app.server.parent.dir}
app.server.tomcat.bin.dir=${app.server.tomcat.dir}/bin
app.server.tomcat.classes.global.dir=${app.server.tomcat.dir}/common/classes
app.server.tomcat.classes.portal.dir=${app.server.tomcat.portal.dir}/WEB-INF/classes
app.server.tomcat.deploy.dir=${app.server.tomcat.dir}/webapps
app.server.tomcat.lib.endorsed.dir=${app.server.tomcat.dir}/common/endorsed
app.server.tomcat.lib.global.dir=${app.server.tomcat.dir}/common/lib/ext
app.server.tomcat.lib.portal.dir=${app.server.tomcat.portal.dir}/WEB-INF/lib
app.server.tomcat.lib.support.dir=${app.server.tomcat.dir}/server/lib
app.server.tomcat.portal.dir=${app.server.tomcat.deploy.dir}/ROOT
app.server.tomcat.log.dir=${app.server.tomcat.dir}/logs
app.server.tomcat.temp.dir=${app.server.tomcat.dir}/temp
app.server.tomcat.work.dir=${app.server.tomcat.dir}/work
app.server.tomcat.zip.name=liferay-portal-tomcat-5.5-${downloads.version.file.name}.zip
#app.server.tomcat.zip.name=liferay-portal-tomcat-5.5-jdk5-${downloads.version.file.name}.zip
app.server.tomcat.zip.url=${sourceforge.mirror}/${app.server.tomcat.zip.name}
ß- 文件中其他内容不作修改-->
修改release.properties文件为(根据本机目录而定):
##
## DO NOT EDIT THIS FILE.
##
## To update the properties of this file, create a separate properties file
## named "release.${user.name}.properties" with the properties to overwrite.
##
##
## Version
##
lp.version= 4.3.1
lp.version.file.name= 4.3.1
##
## Release Info
##
#release.info=on
##
## Release Source
##
lp.source.dir=F:/liferay/portal/release
##
## Extension Environment
##
lp.ext.dir=F:/liferay/portal/ext
##
## Plugins Environment
##
lp.plugins.dir=F:/liferay/plugins/trunk
##
## Eclipse
##
lp.eclipse.dir=F:/liferay/portal
lp.eclipse.project.name=ext
##
## AntInstaller
##
ant.installer.dir=F:/ant
这样我们就配置好了liferay的开发环境,可以通过ant直接发布在指定websevre下(这里的是本机安装好的liferay服务器)
可以将编写好的webservice调用程序加入liferay中,通过修改liferay源代码实现与fedora的连接
修改com.liferay.documentlibrary.service.impl.DLServiceImpl.java
这里只写如何修改新增的例子:代码如下
修改addFile方法为:
原:
public void addFile(
long companyId, String portletId, long groupId, long repositoryId,
String fileName, InputStream is)
throws PortalException, SystemException {
if ((fileName.indexOf("") != -1) ||
(fileName.indexOf("//") != -1) ||
(fileName.indexOf(":") != -1) ||
(fileName.indexOf("*") != -1) ||
(fileName.indexOf("?") != -1) ||
(fileName.indexOf("/"") != -1) ||
(fileName.indexOf("<") != -1) ||
(fileName.indexOf(">") != -1) ||
(fileName.indexOf("|") != -1) ||
(fileName.indexOf("&") != -1) ||
(fileName.indexOf("[") != -1) ||
(fileName.indexOf("]") != -1) ||
(fileName.indexOf("'") != -1)) {
throw new FileNameException(fileName);
}
boolean validFileExtension = false;
String[] fileExtensions =
PropsUtil.getArray(PropsUtil.DL_FILE_EXTENSIONS);
for (int i = 0; i < fileExtensions.length; i++) {
if (StringPool.STAR.equals(fileExtensions[i]) ||
StringUtil.endsWith(fileName, fileExtensions[i])) {
validFileExtension = true;
break;
}
}
if (!validFileExtension) {
throw new FileNameException(fileName);
}
if (is == null) {
throw new FileSizeException(fileName);
}
Session session = null;
try {
session = JCRFactoryUtil.createSession();
Node rootNode = DLUtil.getRootNode(session, companyId);
Node repositoryNode = DLUtil.getFolderNode(rootNode, repositoryId);
if (repositoryNode.hasNode(fileName)) {
throw new DuplicateFileException(fileName);
}
else {
Node fileNode = repositoryNode.addNode(
fileName, JCRConstants.NT_FILE);
Node contentNode = fileNode.addNode(
JCRConstants.JCR_CONTENT, JCRConstants.NT_RESOURCE);
contentNode.addMixin(JCRConstants.MIX_VERSIONABLE);
contentNode.setProperty(
JCRConstants.JCR_MIME_TYPE, "text/plain");
contentNode.setProperty(JCRConstants.JCR_DATA, is);
contentNode.setProperty(
JCRConstants.JCR_LAST_MODIFIED, Calendar.getInstance());
session.save();
Version version = contentNode.checkin();
contentNode.getVersionHistory().addVersionLabel(
version.getName(), String.valueOf(DEFAULT_VERSION), false);
}
}
catch (Exception ioe) {
throw new SystemException(ioe);
}
catch (RepositoryException re) {
throw new SystemException(re);
}
finally {
if (session != null) {
session.logout();
}
}
}
修改后代码:
public void addFile(
long companyId, String portletId, long groupId, long repositoryId,
String fileName, InputStream is)
throws PortalException, SystemException {
if ((fileName.indexOf("") != -1) ||
(fileName.indexOf("//") != -1) ||
(fileName.indexOf(":") != -1) ||
(fileName.indexOf("*") != -1) ||
(fileName.indexOf("?") != -1) ||
(fileName.indexOf("/"") != -1) ||
(fileName.indexOf("<") != -1) ||
(fileName.indexOf(">") != -1) ||
(fileName.indexOf("|") != -1) ||
(fileName.indexOf("&") != -1) ||
(fileName.indexOf("[") != -1) ||
(fileName.indexOf("]") != -1) ||
(fileName.indexOf("'") != -1)) {
throw new FileNameException(fileName);
}
boolean validFileExtension = false;
String[] fileExtensions =
PropsUtil.getArray(PropsUtil.DL_FILE_EXTENSIONS);
for (int i = 0; i < fileExtensions.length; i++) {
if (StringPool.STAR.equals(fileExtensions[i]) ||
StringUtil.endsWith(fileName, fileExtensions[i])) {
validFileExtension = true;
break;
}
}
if (!validFileExtension) {
throw new FileNameException(fileName);
}
if (is == null) {
throw new FileSizeException(fileName);
}
try {
//得到dsId通过fileName
String dsId = fileName.substring(0,fileName.indexOf("."));
//查询在fedora中是否有 repositoryId的DataObject
InputStream _is = FedoraDOMgrInfFactory.getFedoraDOMgrInterface().findObject(String.valueOf(repositoryId),"");
if(_is==null)
//创建DataObject对象 dataObjectMgr.CreatDataObject(String.valueOf(repositoryId), dsId, "test", MIME_TYPE, "", is,fileName);
else
//新增Datastream dataObjectMgr.addDatastream(String.valueOf(repositoryId),dsId, "test", MIME_TYPE, "", is,fileName);
Indexer.addFile(companyId, portletId, groupId, repositoryId, fileName);
}
catch (Exception ioe) {
throw new SystemException(ioe);
}
}
修改com.liferay.documentlibrary.util.IndexerImpl.java中addFile() 方法
修改这一部分:修改前
Session session = null;
try {
session = JCRFactoryUtil.createSession();
Node contentNode = DLUtil.getFileContentNode(
session, companyId, repositoryId, fileName, 0);
is = contentNode.getProperty(JCRConstants.JCR_DATA).getStream();
}
catch (Exception e) {
}
finally {
if (session != null) {
session.logout();
}
}
修改后
try {
is = FedoraDOMgrInfFactory.getFedoraDOMgrInterface().findObject(String.valueOf(repositoryId),fileName.substring(0,fileName.indexOf(".")));
}
catch (Exception e) {
}