All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.efaps.update.schema.access.AccessSetUpdate Maven / Gradle / Ivy

/*
 * Copyright 2003 - 2012 The eFaps Team
 *
 * 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.
 *
 * Revision:        $Rev: 7483 $
 * Last Changed:    $Date: 2012-05-11 11:57:38 -0500 (Fri, 11 May 2012) $
 * Last Changed By: $Author: [email protected] $
 */

package org.efaps.update.schema.access;


import java.net.URL;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.efaps.admin.datamodel.Type;
import org.efaps.db.Instance;
import org.efaps.update.AbstractUpdate;
import org.efaps.update.LinkInstance;
import org.efaps.util.EFapsException;

/**
 * @author The eFaps Team
 * @version $Id: AccessSetUpdate.java 7483 2012-05-11 16:57:38Z [email protected] $
 */
public class AccessSetUpdate
    extends AbstractUpdate
{
    /** Link to access types. */
    private static final Link LINK2ACCESSTYPE = new Link("Admin_Access_AccessSet2Type", "AccessSetLink",
                                                         "Admin_Access_AccessType", "AccessTypeLink");

    /** Link to data model types. */
    private static final Link LINK2DATAMODELTYPE = new Link("Admin_Access_AccessSet2DataModelType", "AccessSetLink",
                                                            "Admin_DataModel_Type", "DataModelTypeLink");

    /** Link to Status. */
    private static final Link LINK2STATUS = new Link("Admin_Access_AccessSet2Status", "AccessSetLink",
                                                     "Admin_DataModel_StatusAbstract", "SatusLink", "Type", "Key");

    /** Link to persons. */
    private static final Link LINK2PERSON = new Link("Admin_Access_AccessSet2UserAbstract", "AccessSetLink",
                                                     "Admin_User_Person", "UserAbstractLink");

    /** Link to roles. */
    private static final Link LINK2ROLE = new Link("Admin_Access_AccessSet2UserAbstract", "AccessSetLink",
                                                   "Admin_User_Role", "UserAbstractLink");

    /** Link to groups. */
    private static final Link LINK2GROUP = new Link("Admin_Access_AccessSet2UserAbstract", "AccessSetLink",
                                                    "Admin_User_Group", "UserAbstractLink");

    /**
     * Map of all links.
     */
    private static final Set ALLLINKS = new HashSet();
    static {
        AccessSetUpdate.ALLLINKS.add(AccessSetUpdate.LINK2ACCESSTYPE);
        AccessSetUpdate.ALLLINKS.add(AccessSetUpdate.LINK2DATAMODELTYPE);
        AccessSetUpdate.ALLLINKS.add(AccessSetUpdate.LINK2STATUS);
        AccessSetUpdate.ALLLINKS.add(AccessSetUpdate.LINK2PERSON);
        AccessSetUpdate.ALLLINKS.add(AccessSetUpdate.LINK2ROLE);
        AccessSetUpdate.ALLLINKS.add(AccessSetUpdate.LINK2GROUP);
    }

    /**
     *
     * @param _url URL of the file
     */
    public AccessSetUpdate(final URL _url)
    {
        super(_url, "Admin_Access_AccessSet", AccessSetUpdate.ALLLINKS);
    }

    /**
     * Creates new instance of class {@link AccessSetUpdate.Definition}.
     *
     * @return new definition instance
     * @see AccessSetUpdate.Definition
     */
    @Override
    protected AbstractDefinition newDefinition()
    {
        return new Definition();
    }

    /**
     * Definition.
     */
    private class Definition extends AbstractDefinition
    {
        /**
         * Name of the current status group.
         */
        private String currentGroupName;

        /**
         * {@inheritDoc}
         */
        @Override
        protected void readXML(final List _tags, final Map _attributes, final String _text)
        {
            final String value = _tags.get(0);
            if ("access-type".equals(value)) {
                addLink(AccessSetUpdate.LINK2ACCESSTYPE, new LinkInstance(_text));
            } else if ("type".equals(value)) {
                addLink(AccessSetUpdate.LINK2DATAMODELTYPE, new LinkInstance(_text));
            } else if ("group".equals(value)) {
                addLink(AccessSetUpdate.LINK2GROUP, new LinkInstance(_text));
            } else if ("person".equals(value)) {
                addLink(AccessSetUpdate.LINK2PERSON, new LinkInstance(_text));
            } else if ("role".equals(value)) {
                addLink(AccessSetUpdate.LINK2ROLE, new LinkInstance(_text));
            } else if ("status".equals(value)) {
                if (_tags.size() == 1) {
                    this.currentGroupName = _attributes.get("group");
                } else if ((_tags.size() == 2) && "key".equals(_tags.get(1))) {
                    final LinkInstance linkinstance = new LinkInstance();
                    linkinstance.getKeyAttr2Value().put("Key", _text);
                    linkinstance.getKeyAttr2Value().put("Type", this.currentGroupName);
                    addLink(AccessSetUpdate.LINK2STATUS, linkinstance);
                }
            } else {
                super.readXML(_tags, _attributes, _text);
            }
        }

        /**
         * {@inheritDoc}
         */
        @Override
        protected void setLinksInDB(final Instance _instance, final Link _linktype, final Set _links)
            throws EFapsException
        {
            if (_links != null) {
                for (final LinkInstance linkInst : _links) {
                    if (linkInst.getKeyAttr2Value().containsKey("Type")) {
                        final String typeName = linkInst.getKeyAttr2Value().get("Type");
                        linkInst.getKeyAttr2Value().put("Type", ((Long) Type.get(typeName).getId()).toString());
                    }
                }
            }
            super.setLinksInDB(_instance, _linktype, _links);
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy