Package com.bradmcevoy.http.webdav

Source Code of com.bradmcevoy.http.webdav.PropPatchableSetter

package com.bradmcevoy.http.webdav;

import com.bradmcevoy.http.PropPatchableResource;
import com.bradmcevoy.http.Resource;
import com.bradmcevoy.http.Response.Status;
import com.bradmcevoy.http.values.ValueAndType;
import com.bradmcevoy.http.webdav.PropPatchHandler.Field;
import com.bradmcevoy.http.webdav.PropPatchHandler.Fields;
import com.bradmcevoy.http.webdav.PropPatchRequestParser.ParseResult;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map.Entry;
import javax.xml.namespace.QName;

/**
* Performs PROPPATCH updates on resources implementing PropPatchable
*
* @author brad
*/
public class PropPatchableSetter implements PropPatchSetter {

    private final Helper helper;

    PropPatchableSetter( Helper helper ) {
        this.helper = helper;
    }

    public PropPatchableSetter() {
        this.helper = new Helper();
    }

    public boolean supports(Resource r) {
        return (r instanceof PropPatchableResource);
    }

    public PropFindResponse setProperties( String href, ParseResult parseResult, Resource r ) {
        PropPatchableResource ppr = (PropPatchableResource) r;
        Fields fields = helper.buildFields(parseResult);
        ppr.setProperties( fields );
        List<PropFindResponse> list = helper.buildResult(href, parseResult);
        return list.get(0);
    }

    class Helper {

        private Fields buildFields( ParseResult parseResult ) {
            Fields fields = new Fields();
            List<Field> removeFields = fields.removeFields;
            for( QName p : parseResult.getFieldsToRemove()) {
                removeFields.add( new Field( p.getLocalPart()));
            }
            List<PropPatchHandler.SetField> setFields = fields.setFields;
            for( Entry<QName, String> entry : parseResult.getFieldsToSet().entrySet()) {
                setFields.add( new PropPatchHandler.SetField( entry.getKey().getLocalPart(), entry.getValue()));
            }
            return fields;
        }

        private List<PropFindResponse> buildResult( String href, ParseResult parseResult ) {
            LinkedHashMap<QName,ValueAndType> knownProps = new LinkedHashMap<QName, ValueAndType>();
            for( QName p : parseResult.getFieldsToRemove()) {
                knownProps.put( p, null);
            }
            for( Entry<QName, String> entry : parseResult.getFieldsToSet().entrySet()) {
                knownProps.put( entry.getKey(), null);
            }
           
            PropFindResponse resp = new PropFindResponse( href, knownProps, new HashMap<Status, List<PropFindResponse.NameAndError>>());
            List<PropFindResponse> responses = new ArrayList<PropFindResponse>();
            responses.add( resp );
            return responses;
        }

    }

}
TOP

Related Classes of com.bradmcevoy.http.webdav.PropPatchableSetter

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.