Package org.opencustomer.connector.webdav

Source Code of org.opencustomer.connector.webdav.WebdavFileStore

/*******************************************************************************
* ***** BEGIN LICENSE BLOCK Version: MPL 1.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (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.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
*
* The Original Code is the OpenCustomer CRM.
*
* The Initial Developer of the Original Code is Thomas Bader (Bader & Jene
* Software-Ingenieurb�ro). Portions created by the Initial Developer are
* Copyright (C) 2005 the Initial Developer. All Rights Reserved.
*
* Contributor(s): Thomas Bader <thomas.bader@bader-jene.de>
*                 Felix Breske <felix.breske@bader-jene.de>
*
* ***** END LICENSE BLOCK *****
*/

package org.opencustomer.connector.webdav;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringBufferInputStream;
import java.security.Principal;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;

import net.fortuna.ical4j.data.ParserException;
import net.fortuna.ical4j.model.ValidationException;

import org.apache.commons.transaction.util.LoggerFacade;
import org.apache.log4j.Logger;
import org.apache.slide.common.Service;
import org.apache.slide.common.ServiceAccessException;
import org.apache.slide.security.AccessDeniedException;
import org.apache.slide.simple.store.BasicWebdavStore;
import org.apache.slide.structure.ObjectNotFoundException;
import org.opencustomer.connector.ical.Ical;
import org.opencustomer.db.dao.calendar.CalendarDAO;
import org.opencustomer.db.dao.calendar.EventCalendarDAO;
import org.opencustomer.db.dao.system.UserDAO;
import org.opencustomer.db.vo.calendar.CalendarVO;
import org.opencustomer.db.vo.system.UserVO;
import org.opencustomer.webapp.auth.Authenticator;
import org.opencustomer.webapp.auth.Right;

/**
* The class WebdavFileStore implements the BasicWEbdavStore and handels the Webdav access for OpenCustomer.
* @author fbreske
*
*/
public class WebdavFileStore implements BasicWebdavStore {

    private static LoggerFacade logger = null;
    private static Service service = null;
    private static Logger log = Logger.getLogger(WebdavFileStore.class);
   
   
    private HashMap<String,CalendarVO> calendarmap;
    private UserVO user;

    /**
     * generates the list of available calendars vor the connected user
     */
    public synchronized void begin(Service service, Principal principal, Object connection, LoggerFacade logger,
            Hashtable parameters)
    {       
        if(log.isDebugEnabled())
            log.debug("initializing WebdavFileStore");
        WebdavFileStore.logger = logger;
        WebdavFileStore.service = service;
        calendarmap = new HashMap<String,CalendarVO>();
       
        if(principal == null)
            return;
       
        user = new UserDAO().getByUserName(principal.getName());
        if(log.isDebugEnabled())
            log.debug("found user " + user);
       
        List<CalendarVO> calendars = new CalendarDAO().getAvailableCalendars(user);
        for(CalendarVO calendar : calendars)
        {
            if(!new EventCalendarDAO().getByCalendar(calendar, false).isEmpty())
                calendarmap.put("/files/" + calendar.getUser().getUserName() + ".ics", calendar);
        }
        if(log.isInfoEnabled())
            log.info("webdav connect for user [" + user.getUserName() + "]");
    }
   
    /**
     * not used
     */
    public void commit(){
    }

    /**
     * not used
     */
    public void rollback(){
    }
   
    /**
     * not used
     */
    public void checkAuthentication(){
    }

    /**
     * @return true if the calendar exists, otherwise false
     */
    public boolean objectExists(String uri)
    {   
        if(uri.equals("/files")){
            return true;
        }
        return calendarmap.containsKey(uri);
    }

    /**
     * @return true for the "/files" folder, otherwise false
     */
    public boolean isFolder(String uri)
    { 
        return uri.equals("/files");
    }

    /**
     * @return true vor the available calendars
     */
    public boolean isResource(String uri)
    {
        return calendarmap.containsKey(uri);
    }

    /**
     * not allowed, thows always an AccessDebiedException
     */
    public void createFolder(String folderUri) throws AccessDeniedException
    {    
        throw new AccessDeniedException(folderUri, "create folder", "create");
    }

    /**
     * @return the list of available calendars
     */
    public String[] getChildrenNames(String folderUri)
    {  
        if(folderUri.equals("/files"))
        {
            List<String> childList = new ArrayList<String>();
            for(CalendarVO calendar : calendarmap.values())
            {
                childList.add(calendar.getUser().getUserName() + ".ics");
            }
            String[] childrenNames = new String[childList.size()];
            childrenNames = childList.toArray(childrenNames);
            return childrenNames;
        }
        else
            return null;
    }

    /**
     * not allowed, thows always an AccessDeniedException
     */
    public void createResource(String resourceUri) throws AccessDeniedException
    {   
        throw new AccessDeniedException(resourceUri, "create file", "create");
    }

    public void setResourceContent(String resourceUri, InputStream content, String contentType, String characterEncoding) throws AccessDeniedException
    {     
        if(user != null)
        {
            Authenticator auth = new Authenticator(user);
            if(!auth.isValid(Right.EXTERN_WEBDAV_WRITE))
            {
                if(log.isInfoEnabled())
                    log.info("no write rights for user");
                return ;
            }
               
           
            if(calendarmap.containsKey(resourceUri))
            {
                    try
                    {
                        if(log.isInfoEnabled())
                            log.info("calendar import [" + resourceUri + "]");
                        Ical.getInstance().importIcal(content, calendarmap.get(resourceUri), user, Ical.EventHandling.DELETE);
                    }
                    catch (IOException e)
                    {
                        e.printStackTrace();
                    }
                    catch (ParserException e)
                    {
                        e.printStackTrace();
                    }
                    catch (ParseException e)
                    {
                        e.printStackTrace();
                    }
            }
        }
    }

    /**
     * @return returns static 10kB, should be the correct size of the calendar
     */
    public long getResourceLength(String resourceUri)
    {    
        return new Long(10000); // TODO: groesse berechnen
    }

    /**
     * generates dynamically the iCalendar files.
     * @return the iCalendar file
     */
    public InputStream getResourceContent(String resourceUri) throws ServiceAccessException, AccessDeniedException,
            ObjectNotFoundException {
       
        if(calendarmap.containsKey(resourceUri))
        {
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                try
                {
                    if(log.isInfoEnabled())
                        log.info("calendar export [" +resourceUri + "]");
                   
                    Ical.getInstance().exportIcal(calendarmap.get(resourceUri),user,out);
                }
                catch (IOException e)
                {
                    throw new ServiceAccessException(service,e);
                }
                catch (ValidationException e)
                {
                    throw new ServiceAccessException(service,e);
                }
                catch (ParseException e)
                {
                    throw new ServiceAccessException(service,e);
                }
                return new ByteArrayInputStream(out.toByteArray());
        }
        return new StringBufferInputStream("");
   }

    /**
     * not allowd, throws always a AccessDeniedExceltion
     */
    public void removeObject(String uri) throws AccessDeniedException
    {    
        throw new AccessDeniedException(uri,"", "delete");
    }

    /**
     * return the actual date
     */
    public Date getLastModified(String uri)
    {    
        if(uri.equals("/files"))
            return new Date();
        return new Date();
    }

    /**
     * @return the creation date of the calendar
     */
    public Date getCreationDate(String uri)
    {    
        if(uri.equals("/files"))
            return new Date();
        return calendarmap.get(uri).getCreateDate();
    }
}
TOP

Related Classes of org.opencustomer.connector.webdav.WebdavFileStore

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.