Hi,

I was trying hard to rebuild sipxconfig with my new function but i always get build errors. Maybe I missed to include some dependencies but there is no specific error shown. I added my changed files so hopefully you could help me.

Thanks
Stephan
/*
 *
 *
 * Copyright (C) 2007 Pingtel Corp., certain elements licensed under a 
Contributor Agreement.
 * Contributors retain copyright to elements licensed under a Contributor 
Agreement.
 * Licensed to the User under the LGPL license.
 *
 * $
 */
package org.sipfoundry.sipxconfig.admin.callgroup;

import java.util.Collection;
import java.util.List;

import org.sipfoundry.sipxconfig.admin.commserver.AliasProvider;
import org.sipfoundry.sipxconfig.alias.AliasOwner;

public interface CallGroupContext extends AliasOwner, AliasProvider {
    public static final String CONTEXT_BEAN_NAME = "callGroupContext";

    void activateCallGroups();

    CallGroup loadCallGroup(Integer id);

    List<CallGroup> getCallGroups();

    void storeCallGroup(CallGroup callGroup);

    void removeCallGroups(Collection ids);

    void duplicateCallGroups(Collection ids);

    void removeUser(Integer userId);

    void addUsersToCallGroup(Integer callGroupId, Collection ids);

    void clear();

    void generateSipPasswords();

    void removeCallGroupByAlias(String name);

    void addUsersToCallGroupByName(String callGroupAlias, String userName);
}
/*
 *
 *
 * Copyright (C) 2007 Pingtel Corp., certain elements licensed under a 
Contributor Agreement.
 * Contributors retain copyright to elements licensed under a Contributor 
Agreement.
 * Licensed to the User under the LGPL license.
 *
 * $
 */
package org.sipfoundry.sipxconfig.admin.callgroup;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

import org.sipfoundry.sipxconfig.acd.AcdContext;
import org.sipfoundry.sipxconfig.acd.AcdQueue;
import org.sipfoundry.sipxconfig.admin.ExtensionInUseException;
import org.sipfoundry.sipxconfig.admin.NameInUseException;
import org.sipfoundry.sipxconfig.admin.commserver.SipxReplicationContext;
import org.sipfoundry.sipxconfig.admin.commserver.imdb.DataSet;
import org.sipfoundry.sipxconfig.alias.AliasManager;
import org.sipfoundry.sipxconfig.common.BeanId;
import org.sipfoundry.sipxconfig.common.CoreContext;
import org.sipfoundry.sipxconfig.common.SipxCollectionUtils;
import org.sipfoundry.sipxconfig.common.SipxHibernateDaoSupport;
import org.sipfoundry.sipxconfig.common.User;
import org.sipfoundry.sipxconfig.common.event.UserDeleteListener;
import org.springframework.orm.hibernate3.HibernateTemplate;

/**
 * Hibernate implementation of the call group context
 */
public class CallGroupContextImpl extends SipxHibernateDaoSupport implements 
CallGroupContext {
    private static final String VALUE = "value";

    private static final String QUERY_CALL_GROUP_IDS_WITH_NAME = 
"callGroupIdsWithName";
    private static final String QUERY_CALL_GROUP_IDS_WITH_ALIAS = 
"callGroupIdsWithAlias";

    private CoreContext m_coreContext;
    private SipxReplicationContext m_replicationContext;
    private AliasManager m_aliasManager;
    private AcdContext m_acdContext;

    // trivial setters
    public void setCoreContext(CoreContext coreContext) {
        m_coreContext = coreContext;
    }

    public void setReplicationContext(SipxReplicationContext 
replicationContext) {
        m_replicationContext = replicationContext;
    }

    public void setAliasManager(AliasManager aliasManager) {
        m_aliasManager = aliasManager;
    }

    public void setAcdContext(AcdContext acdContext) {
        m_acdContext = acdContext;
    }

    public CallGroup loadCallGroup(Integer id) {
        return (CallGroup) getHibernateTemplate().load(CallGroup.class, id);
    }

    public void storeCallGroup(CallGroup callGroup) {
        // Check for duplicate names or extensions before saving the call group
        String name = callGroup.getName();
        String extension = callGroup.getExtension();
        final String huntGroupTypeName = "hunt group";
        if (!m_aliasManager.canObjectUseAlias(callGroup, name)) {
            throw new NameInUseException(huntGroupTypeName, name);
        }
        if (!m_aliasManager.canObjectUseAlias(callGroup, extension)) {
            throw new ExtensionInUseException(huntGroupTypeName, extension);
        }

        getHibernateTemplate().saveOrUpdate(callGroup);
        // activate call groups every time the call group is saved
        activateCallGroups();
    }

    public void removeCallGroups(Collection ids) {
        if (ids.isEmpty()) {
            return;
        }

        m_acdContext.removeOverflowSettings(ids, AcdQueue.HUNTGROUP_TYPE);
        removeAll(CallGroup.class, ids);

        // activate call groups every time the call group is removed
        activateCallGroups();
    }

    public UserDeleteListener createUserDeleteListener() {
        return new OnUserDelete();
    }

    private class OnUserDelete extends UserDeleteListener {
        @Override
        protected void onUserDelete(User user) {
            getHibernateTemplate().update(user);
            removeUser(user.getId());
        }
    }

    /**
     * Removes all rings associated with a removed user. This is temporary. In 
the long term we
     * will introduce hibernate dependency between the users and rings table.
     *
     * Note: we cannot just blindly removed rings from database, there is a 
cascade relationship
     * between call groups and rings, hibernate will resave the ring if it's 
removed from database
     * but not from the call group
     *
     * This function is called from legacy notification service, there is no 
need to activate call
     * groups - they will be activated anyway because alias generation follows 
user deletion.
     *
     * @param userId id of the user that us being deleted
     *
     */
    public void removeUser(Integer userId) {
        final HibernateTemplate hibernate = getHibernateTemplate();
        Collection rings = 
hibernate.findByNamedQueryAndNamedParam("userRingsForUserId",
                "userId", userId);
        for (Iterator i = rings.iterator(); i.hasNext();) {
            UserRing ring = (UserRing) i.next();
            CallGroup callGroup = ring.getCallGroup();
            callGroup.removeRing(ring);
            hibernate.save(callGroup);
        }
    }

    public List<CallGroup> getCallGroups() {
        return getHibernateTemplate().loadAll(CallGroup.class);
    }

    public void duplicateCallGroups(Collection ids) {
        for (Iterator i = ids.iterator(); i.hasNext();) {
            CallGroup group = loadCallGroup((Integer) i.next());

            // Create a copy of the call group with a unique name
            CallGroup groupDup = (CallGroup) duplicateBean(group, 
QUERY_CALL_GROUP_IDS_WITH_NAME);

            // Extensions should be unique, so don't copy the extension from the
            // source call group. The admin must fill it in explicitly.
            groupDup.setExtension(null);

            groupDup.setEnabled(false);
            storeCallGroup(groupDup);
        }
    }

    /**
     * Remove all call groups - mostly used for testing
     */
    public void clear() {
        HibernateTemplate template = getHibernateTemplate();
        Collection callGroups = template.loadAll(CallGroup.class);
        template.deleteAll(callGroups);
    }

    /**
     * Sends notification to profile generator to trigger alias generation
     */
    public void activateCallGroups() {
        m_replicationContext.generate(DataSet.ALIAS);
        m_replicationContext.generate(DataSet.PERMISSION);
        m_replicationContext.generate(DataSet.CREDENTIAL);
    }

    /**
     * Generate aliases for all call groups
     */
    public Collection getAliasMappings() {
        final String dnsDomain = m_coreContext.getDomainName();
        Collection callGroups = getCallGroups();
        List allAliases = new ArrayList(callGroups.size());
        for (Iterator i = callGroups.iterator(); i.hasNext();) {
            CallGroup cg = (CallGroup) i.next();
            allAliases.addAll(cg.generateAliases(dnsDomain));
        }
        return allAliases;
    }

    public boolean isAliasInUse(String alias) {
        // Look for the ID of a call group with the specified alias as its name 
or extension.
        // If there is one, then the alias is in use.
        List objs = getHibernateTemplate().findByNamedQueryAndNamedParam(
                QUERY_CALL_GROUP_IDS_WITH_ALIAS, VALUE, alias);
        return SipxCollectionUtils.safeSize(objs) > 0;
    }

    public Collection getBeanIdsOfObjectsWithAlias(String alias) {
        List ids = getHibernateTemplate().findByNamedQueryAndNamedParam(
                QUERY_CALL_GROUP_IDS_WITH_ALIAS, VALUE, alias);
        Collection bids = BeanId.createBeanIdCollection(ids, CallGroup.class);
        return bids;
    }

    public void addUsersToCallGroup(Integer callGroupId, Collection ids) {
        CallGroup callGroup = loadCallGroup(callGroupId);
        for (Iterator i = ids.iterator(); i.hasNext();) {
            Integer userId = (Integer) i.next();
            User user = m_coreContext.loadUser(userId);
            callGroup.insertRingForUser(user);
        }
        storeCallGroup(callGroup);
    }

    public void generateSipPasswords() {
        List<CallGroup> callGroups = getCallGroups();
        List<CallGroup> changed = new ArrayList<CallGroup>();
        for (CallGroup callGroup : callGroups) {
            if (callGroup.generateSipPassword()) {
                changed.add(callGroup);
            }
        }
        // no need to trigger replication - do not use storeCallGroup
        getHibernateTemplate().saveOrUpdateAll(changed);
    }

    @Override
    public void removeCallGroupByAlias(String alias) {
        List ids = 
getHibernateTemplate().findByNamedQueryAndNamedParam(QUERY_CALL_GROUP_IDS_WITH_ALIAS,
 VALUE, alias);
        removeCallGroups(ids);
    }

    @Override
    public void addUsersToCallGroupByName(String callGroupAlias, String 
userName) {
        List cids = 
getHibernateTemplate().findByNamedQueryAndNamedParam(QUERY_CALL_GROUP_IDS_WITH_ALIAS,
 VALUE, callGroupAlias);
        List ids = 
getHibernateTemplate().findByNamedQueryAndNamedParam("userIdsWithAlias", VALUE, 
userName);
        Iterator i = cids.iterator();

        if(i.hasNext()) {
            addUsersToCallGroup((Integer)i.next(), ids);
        }
    }

}
/*
 *
 *
 * Copyright (C) 2007 Pingtel Corp., certain elements licensed under a 
Contributor Agreement.
 * Contributors retain copyright to elements licensed under a Contributor 
Agreement.
 * Licensed to the User under the LGPL license.
 *
 * $
 */
package org.sipfoundry.sipxconfig.api;

import java.rmi.RemoteException;
import java.util.Collection;

import org.sipfoundry.sipxconfig.admin.callgroup.CallGroupContext;

public class CallGroupServiceImpl implements CallGroupService {
    private CallGroupContext m_context;
    private CallGroupBuilder m_builder;

    public void setCallGroupContext(CallGroupContext context) {
        m_context = context;
    }

    public void setCallGroupBuilder(CallGroupBuilder builder) {
        m_builder = builder;
    }

    public void addCallGroup(AddCallGroup acg) throws RemoteException {
        CallGroup apiCg = acg.getCallGroup();
        org.sipfoundry.sipxconfig.admin.callgroup.CallGroup myCg =
            new org.sipfoundry.sipxconfig.admin.callgroup.CallGroup();
        ApiBeanUtil.toMyObject(m_builder, myCg, apiCg);
        m_context.storeCallGroup(myCg);
    }

    public GetCallGroupsResponse getCallGroups() throws RemoteException {
        GetCallGroupsResponse response = new GetCallGroupsResponse();
        Collection callGroupsColl = m_context.getCallGroups();
        org.sipfoundry.sipxconfig.admin.callgroup.CallGroup[] callGroups =
            (org.sipfoundry.sipxconfig.admin.callgroup.CallGroup[]) 
callGroupsColl
                .toArray(new 
org.sipfoundry.sipxconfig.admin.callgroup.CallGroup[callGroupsColl.size()]);
        CallGroup[] arrayOfCallGroups =
            (CallGroup[]) ApiBeanUtil.toApiArray(m_builder, callGroups, 
CallGroup.class);
        response.setCallGroups(arrayOfCallGroups);
        return response;
    }

    public void deleteCallGroup(DeleteCallGroup group) throws RemoteException {
        m_context.removeCallGroupByAlias(group.getCallGroupAlias());
    }

    public void addUserToCallGroup(AddUserToCallGroup data) throws 
RemoteException {
        m_context.addUsersToCallGroupByName(data.getAddUserCallGroupAlias(), 
data.getUserName());
    }

}
<?xml version="1.0" encoding="UTF-8"?>
<!--
  - NOTES: 
  -  o If you are making a change that is not backwards compatible modify the target namespace
  -    to be of the form: http://www.sipfoundry.org/<year>/<2-digit-month>/<day>/ConfigService
  -    With that update the namespace mapping in web/build.xml:
  -    <mapping namespace="http://www.sipfoundry.org/2007/08/21/ConfigService"; package="org.sipfoundry.sipxconfig.api"/>
  -    Make sure namespace is updated in SOAP examples and the examples all operate after the WSDL update
  -    Refer to: http://www.ibm.com/developerworks/webservices/library/ws-version/
  -    for further details on SOAP versioning
  -  o After editing this file, run "ant wsdl" target and hit f5 in eclipse on
  -    web project
-->
<definitions name="ConfigService" targetNamespace="http://www.sipfoundry.org/2007/08/21/ConfigService";
  xmlns:tns="http://www.sipfoundry.org/2007/08/21/ConfigService"; xmlns:xsd="http://www.w3.org/2001/XMLSchema";
  xmlns="http://schemas.xmlsoap.org/wsdl/"; xmlns:soapbind="http://schemas.xmlsoap.org/wsdl/soap/";
  xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/";>

  <types>
    <xsd:schema targetNamespace="http://www.sipfoundry.org/2007/08/21/ConfigService";>

      <!-- B U S I N E S S  O B J E C T S -->
      <xsd:simpleType name="RingType">
        <xsd:restriction base="xsd:string">
          <xsd:enumeration value="delayed">
            <xsd:annotation>
              <xsd:documentation>If no response</xsd:documentation>
            </xsd:annotation>
          </xsd:enumeration>
          <xsd:enumeration value="immediate">
            <xsd:annotation>
              <xsd:documentation>At the same time</xsd:documentation>
            </xsd:annotation>
          </xsd:enumeration>
        </xsd:restriction>
      </xsd:simpleType>
      <!-- 
        <xsd:complexType name="AbstractRing">
        <xsd:sequence>
        <xsd:element name="expiration" type="xsd:int" minOccurs="1" maxOccurs="1"/>
        <xsd:element name="type" type="xsd:string" minOccurs="1" maxOccurs="1"/>
        <xsd:element name="position" type="xsd:int" minOccurs="1" maxOccurs="1"/>
        </xsd:sequence>
        </xsd:complexType>
      -->
      <xsd:complexType name="UserRing">
        <!--
          - Ruby 1.8.4 from FC4 doesn't have support for this yet, latest download
          -   from SOAP4R does. Hold back on this as long as possible until FC4 catches up
          -  xsd:extension base="tns:AbstractRing"
        -->
        <xsd:sequence>
          <xsd:element name="expiration" type="xsd:int" minOccurs="1" maxOccurs="1" />
          <xsd:element name="type" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="position" type="xsd:int" minOccurs="1" maxOccurs="1" />
          <xsd:element name="userName" type="xsd:string" minOccurs="1" maxOccurs="1" />
        </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="CallGroup">
        <xsd:sequence>
          <xsd:element name="name" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="extension" type="xsd:string" nillable="true" minOccurs="0" maxOccurs="1" />
          <xsd:element name="description" type="xsd:string" nillable="true" minOccurs="0" maxOccurs="1" />
          <xsd:element name="enabled" type="xsd:boolean" nillable="true" minOccurs="0" maxOccurs="1" />
          <xsd:element name="rings" type="tns:UserRing" nillable="true" minOccurs="0" maxOccurs="unbounded" />
        </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="ArrayOfCallGroups">
        <xsd:sequence>
          <xsd:element name="callGroup" type="tns:CallGroup" nillable="true" minOccurs="0" maxOccurs="unbounded" />
        </xsd:sequence>
      </xsd:complexType>
      <xsd:simpleType name="PermissionType">
        <xsd:restriction base="xsd:string">
          <xsd:enumeration value="APPLICATION">
            <xsd:annotation>
              <xsd:documentation>Application permission type</xsd:documentation>
            </xsd:annotation>
          </xsd:enumeration>
          <xsd:enumeration value="CALL">
            <xsd:annotation>
              <xsd:documentation>Call handling permission type is used when defining dial plan rules</xsd:documentation>
            </xsd:annotation>
          </xsd:enumeration>
          <xsd:enumeration value="VOICEMAIL_SERVER">
            <xsd:annotation>
              <xsd:documentation>VMServer permission type defines which VM server hosts user VM box</xsd:documentation>
            </xsd:annotation>
          </xsd:enumeration>
        </xsd:restriction>
      </xsd:simpleType>
      <xsd:complexType name="Permission">
        <xsd:sequence>
          <!--
            -  Names of custom permissions are assigned by the system and can not be set by the user
            -  when adding or modifying permissions
          -->
          <xsd:element name="name" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="label" type="xsd:string" nillable="true" minOccurs="0" maxOccurs="1" />
          <xsd:element name="description" type="xsd:string" nillable="true" minOccurs="0" maxOccurs="1" />
          <xsd:element name="defaultValue" type="xsd:boolean" nillable="true" minOccurs="0" maxOccurs="1" />
          <!--
            -  The following are read-only permission parameters  
            -  type - call-handling, application or voicemail-server
            -  builtIn - builtIn or custom. Custom permissions can only be of type call-handling
          -->
          <xsd:element name="type" type="xsd:string" nillable="true" minOccurs="0" maxOccurs="1" />
          <xsd:element name="builtIn" type="xsd:boolean" nillable="true" minOccurs="0" maxOccurs="1" />
        </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="ArrayOfPermissions">
        <xsd:sequence>
          <xsd:element name="permission" type="tns:Permission" nillable="true" minOccurs="0" maxOccurs="unbounded" />
        </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="PermissionSearch">
        <xsd:sequence>
          <xsd:element name="byName" type="xsd:string" minOccurs="0" maxOccurs="1" />
          <xsd:element name="byLabel" type="xsd:string" minOccurs="0" maxOccurs="1" />
        </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="User">
        <xsd:sequence>
          <xsd:element name="userName" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="pintoken" type="xsd:string" nillable="true" maxOccurs="1" />
          <xsd:element name="lastName" type="xsd:string" nillable="true" maxOccurs="1" />
          <xsd:element name="firstName" type="xsd:string" nillable="true" maxOccurs="1" />
          <xsd:element name="sipPassword" type="xsd:string" nillable="true" maxOccurs="1" />
          <xsd:element name="aliases" type="xsd:string" nillable="true" minOccurs="0" maxOccurs="unbounded" />
          <xsd:element name="emailAddress" type="xsd:string" nillable="true" maxOccurs="1" />
          <xsd:element name="groups" type="xsd:string" nillable="true" minOccurs="0" maxOccurs="unbounded" />
          <xsd:element name="permissions" type="xsd:string" nillable="true" minOccurs="0" maxOccurs="unbounded" />
        </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="ArrayOfUsers">
        <xsd:sequence>
          <xsd:element name="user" type="tns:User" nillable="true" minOccurs="0" maxOccurs="unbounded" />
        </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="Phone">
        <xsd:sequence>
          <xsd:element name="serialNumber" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="modelId" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="description" type="xsd:string" nillable="true" minOccurs="0" maxOccurs="1" />
          <xsd:element name="groups" type="xsd:string" nillable="true" minOccurs="0" maxOccurs="unbounded" />
          <xsd:element name="lines" type="tns:Line" nillable="true" minOccurs="0" maxOccurs="unbounded" />
          <xsd:element name="deviceVersion" type="xsd:string" nillable="true" minOccurs="0" maxOccurs="1" />
        </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="ArrayOfPhones">
        <xsd:sequence>
          <xsd:element name="user" type="tns:Phone" nillable="true" minOccurs="0" maxOccurs="unbounded" />
        </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="Property">
        <xsd:all>
          <xsd:element name="property" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="value" type="xsd:string" nillable="true" minOccurs="1" maxOccurs="1" />
        </xsd:all>
      </xsd:complexType>
      <xsd:complexType name="PhoneSearch">
        <xsd:sequence>
          <xsd:element name="bySerialNumber" type="xsd:string" minOccurs="0" maxOccurs="1" />
          <xsd:element name="byGroup" type="xsd:string" minOccurs="0" maxOccurs="1" />
        </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="UserSearch">
        <xsd:sequence>
          <xsd:element name="byUserName" type="xsd:string" minOccurs="0" maxOccurs="1" />
          <xsd:element name="byFuzzyUserNameOrAlias" type="xsd:string" minOccurs="0" maxOccurs="1" />
          <xsd:element name="byGroup" type="xsd:string" minOccurs="0" maxOccurs="1" />
        </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="Line">
        <xsd:sequence>
          <xsd:element name="userId" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="uri" type="xsd:string" minOccurs="1" maxOccurs="1" />
        </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="AddExternalLine">
        <xsd:sequence>
          <xsd:element name="userId" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="displayName" type="xsd:string" minOccurs="0" maxOccurs="1" />
          <xsd:element name="password" type="xsd:string" minOccurs="0" maxOccurs="1" />
          <xsd:element name="registrationServer" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="voiceMail" type="xsd:string" minOccurs="0" maxOccurs="1" />
        </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="ParkOrbit">
        <xsd:sequence>
          <xsd:element name="name" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="extension" type="xsd:string" nillable="true" minOccurs="0" maxOccurs="1" />
          <xsd:element name="description" type="xsd:string" nillable="true" minOccurs="0" maxOccurs="1" />
          <xsd:element name="enabled" type="xsd:boolean" nillable="true" minOccurs="0" maxOccurs="1" />
          <xsd:element name="music" type="xsd:string" nillable="true" minOccurs="0" maxOccurs="1" />
        </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="ArrayOfParkOrbits">
        <xsd:sequence>
          <xsd:element name="parkOrbit" type="tns:ParkOrbit" nillable="true" minOccurs="0" maxOccurs="unbounded" />
        </xsd:sequence>
      </xsd:complexType>

      <!-- C A L L   G R O U P -->
      <xsd:element name="GetCallGroupsResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="callGroups" type="tns:ArrayOfCallGroups" minOccurs="1" maxOccurs="1" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="AddCallGroup">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="callGroup" type="tns:CallGroup" minOccurs="1" maxOccurs="1" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="DeleteCallGroup">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="callGroupAlias" type="xsd:string" minOccurs="1" maxOccurs="1" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="AddUserToCallGroup">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="addUserCallGroupAlias" type="xsd:string" minOccurs="1" maxOccurs="1" />
            <xsd:element name="userName" type="xsd:string" minOccurs="1" maxOccurs="1" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <!-- P A R K   O R B I T -->
      <xsd:element name="GetParkOrbitsResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="parkOrbits" type="tns:ArrayOfParkOrbits" minOccurs="1" maxOccurs="1" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="AddParkOrbit">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="parkOrbit" type="tns:ParkOrbit" minOccurs="1" maxOccurs="1" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <!-- P E R M I S S I O N S -->
      <xsd:element name="FindPermissionResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="permissions" type="tns:ArrayOfPermissions" minOccurs="1" maxOccurs="1" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="AddPermission">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="permission" type="tns:Permission" minOccurs="1" maxOccurs="1" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="FindPermission">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="search" type="tns:PermissionSearch" minOccurs="1" maxOccurs="1" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="ManagePermission">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="search" type="tns:PermissionSearch" minOccurs="1" maxOccurs="1" />
            <xsd:element name="edit" type="tns:Property" maxOccurs="unbounded" />
            <xsd:element name="deletePermission" type="xsd:boolean" nillable="true" minOccurs="0" maxOccurs="1" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <!-- P H O N E -->
      <xsd:element name="FindPhoneResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="phones" type="tns:ArrayOfPhones" minOccurs="1" maxOccurs="1" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="AddPhone">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="phone" type="tns:Phone" minOccurs="1" maxOccurs="1" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="FindPhone">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="search" type="tns:PhoneSearch" minOccurs="1" maxOccurs="1" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="ManagePhone">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="search" type="tns:PhoneSearch" minOccurs="1" maxOccurs="1" />
            <xsd:element name="edit" type="tns:Property" maxOccurs="unbounded" />
            <xsd:element name="deletePhone" type="xsd:boolean" nillable="true" minOccurs="0" maxOccurs="1" />
            <xsd:element name="addGroup" type="xsd:string" nillable="true" minOccurs="0" maxOccurs="1" />
            <xsd:element name="removeGroup" type="xsd:string" nillable="true" minOccurs="0" maxOccurs="1" />
            <xsd:element name="addLine" type="tns:Line" nillable="true" minOccurs="0" maxOccurs="1" />
            <xsd:element name="addExternalLine" type="tns:AddExternalLine" nillable="true" minOccurs="0" maxOccurs="1" />
            <xsd:element name="removeLineByUserId" type="xsd:string" nillable="true" minOccurs="0" maxOccurs="1" />
            <xsd:element name="removeLineByUri" type="xsd:string" nillable="true" minOccurs="0" maxOccurs="1" />
            <xsd:element name="generateProfiles" type="xsd:boolean" nillable="true" minOccurs="0" maxOccurs="1" />
            <xsd:element name="restart" type="xsd:boolean" nillable="true" minOccurs="0" maxOccurs="1" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <!-- U S E R -->
      <xsd:element name="FindUserResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="users" type="tns:ArrayOfUsers" minOccurs="1" maxOccurs="1" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="AddUser">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="user" type="tns:User" minOccurs="1" maxOccurs="1" />
            <xsd:element name="pin" type="xsd:string" minOccurs="1" maxOccurs="1" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="ManageUser">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="search" type="tns:UserSearch" minOccurs="1" maxOccurs="1" />
            <xsd:element name="edit" type="tns:Property" maxOccurs="unbounded" />
            <xsd:element name="deleteUser" type="xsd:boolean" nillable="true" minOccurs="0" maxOccurs="1" />
            <xsd:element name="addGroup" type="xsd:string" nillable="true" minOccurs="0" maxOccurs="1" />
            <xsd:element name="removeGroup" type="xsd:string" nillable="true" minOccurs="0" maxOccurs="1" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="FindUser">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="search" type="tns:UserSearch" minOccurs="1" maxOccurs="1" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <!-- S Y S T E M  I N F O -->
      <xsd:complexType name="Domain">
        <xsd:sequence>
          <xsd:element name="name" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="realm" type="xsd:string" minOccurs="1" maxOccurs="1" />
          <xsd:element name="aliases" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
        </xsd:sequence>
      </xsd:complexType>
      <xsd:element name="SystemInfo">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="domain" type="tns:Domain" minOccurs="1" maxOccurs="1" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <!-- T E S T -->
      <xsd:element name="ResetServices">
        <xsd:complexType>
          <!-- A flag for each service indicating whether it should be reset -->
          <xsd:sequence>
            <xsd:element name="callGroup" type="xsd:boolean" nillable="true" minOccurs="0" maxOccurs="1" />
            <xsd:element name="parkOrbit" type="xsd:boolean" nillable="true" minOccurs="0" maxOccurs="1" />
            <xsd:element name="permission" type="xsd:boolean" nillable="true" minOccurs="0" maxOccurs="1" />
            <xsd:element name="phone" type="xsd:boolean" nillable="true" minOccurs="0" maxOccurs="1" />
            <xsd:element name="user" type="xsd:boolean" nillable="true" minOccurs="0" maxOccurs="1" />
            <!-- if there is a superadmin already, service will preserve PIN, but all other data cleared -->
            <xsd:element name="superAdmin" type="xsd:boolean" nillable="true" minOccurs="0" maxOccurs="1" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:schema>
  </types>

  <!-- 
    - BOILER PLATE SECTION
    - Much of this section is redundant, cutting and pasting.  Automation is imminent.
  -->

  <!-- C A L L   G R O U P   S E R V I C E -->
  <message name="addCallGroupResponse" />
  <message name="addCallGroupRequest">
    <part name="addCallGroup" element="tns:AddCallGroup" />
  </message>
  <message name="getCallGroupsResponse">
    <part name="getCallGroups" element="tns:GetCallGroupsResponse" />
  </message>
  <message name="deleteCallGroupResponse" />
  <message name="deleteCallGroupRequest">
    <part name="deleteCallGroup" element="tns:DeleteCallGroup" />
  </message>
  <message name="getCallGroupsRequest" />
  <message name="addUserToCallGroupResponse" />
  <message name="addUserToCallGroupRequest">
    <part name="addUserToCallGroup" element="tns:AddUserToCallGroup" />
  </message>
  <portType name="CallGroupService">
    <documentation>Any change to call groups updates all servers automatically and asynchronously.</documentation>
    <operation name="addCallGroup">
      <input message="tns:addCallGroupRequest" />
      <output message="tns:addCallGroupResponse" />
    </operation>
    <operation name="getCallGroups">
      <input message="tns:getCallGroupsRequest" />
      <output message="tns:getCallGroupsResponse" />
    </operation>
    <operation name="deleteCallGroup">
      <input message="tns:deleteCallGroupRequest" />
      <output message="tns:deleteCallGroupResponse" />
    </operation>
    <operation name="addUserToCallGroup">
      <input message="tns:addUserToCallGroupRequest" />
      <output message="tns:addUserToCallGroupResponse" />
    </operation>
  </portType>

  <binding name="CallGroupServiceSoapBinding" type="tns:CallGroupService">
    <soapbind:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"; />
    <operation name="addCallGroup">
      <soapbind:operation />
      <input>
        <soapbind:body use="literal" />
      </input>
      <output>
        <soapbind:body use="literal" />
      </output>
    </operation>
    <operation name="getCallGroups">
      <soapbind:operation />
      <input>
        <soapbind:body use="literal" />
      </input>
      <output>
        <soapbind:body use="literal" />
      </output>
    </operation>
    <operation name="deleteCallGroup">
      <soapbind:operation />
      <input>
        <soapbind:body use="literal" />
      </input>
      <output>
        <soapbind:body use="literal" />
      </output>
    </operation>
    <operation name="addUserToCallGroup">
      <soapbind:operation />
      <input>
        <soapbind:body use="literal" />
      </input>
      <output>
        <soapbind:body use="literal" />
      </output>
    </operation>
  </binding>

  <!-- C O N F E R E N C E   B R I D G E   S E R V I C E -->


  <!-- P A R K   O R B I T   S E R V I C E -->
  <message name="addParkOrbitResponse" />
  <message name="addParkOrbitRequest">
    <part name="addParkOrbit" element="tns:AddParkOrbit" />
  </message>
  <message name="getParkOrbitsResponse">
    <part name="getParkOrbits" element="tns:GetParkOrbitsResponse" />
  </message>
  <message name="getParkOrbitsRequest" />
  <portType name="ParkOrbitService">
    <documentation>Any change to park orbits updates all servers automatically and asynchronously.</documentation>
    <operation name="addParkOrbit">
      <input message="tns:addParkOrbitRequest" />
      <output message="tns:addParkOrbitResponse" />
    </operation>
    <operation name="getParkOrbits">
      <input message="tns:getParkOrbitsRequest" />
      <output message="tns:getParkOrbitsResponse" />
    </operation>
  </portType>

  <binding name="ParkOrbitServiceSoapBinding" type="tns:ParkOrbitService">
    <soapbind:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"; />
    <operation name="addParkOrbit">
      <soapbind:operation />
      <input>
        <soapbind:body use="literal" />
      </input>
      <output>
        <soapbind:body use="literal" />
      </output>
    </operation>
    <operation name="getParkOrbits">
      <soapbind:operation />
      <input>
        <soapbind:body use="literal" />
      </input>
      <output>
        <soapbind:body use="literal" />
      </output>
    </operation>
  </binding>

  <!-- P E R M I S S I O N S   S E R V I C E -->
  <message name="addPermissionResponse" />
  <message name="addPermissionRequest">
    <part name="addPermission" element="tns:AddPermission" />
  </message>
  <message name="findPermissionResponse">
    <part name="findPermission" element="tns:FindPermissionResponse" />
  </message>
  <message name="findPermissionRequest">
    <part name="findPermission" element="tns:FindPermission" />
  </message>
  <message name="managePermissionResponse" />
  <message name="managePermissionRequest">
    <part name="managePermission" element="tns:ManagePermission" />
  </message>

  <portType name="PermissionService">
    <documentation>Any change to permisions updates all servers automatically and asynchronously.</documentation>
    <operation name="addPermission">
      <input message="tns:addPermissionRequest" />
      <output message="tns:addPermissionResponse" />
    </operation>
    <operation name="findPermission">
      <input message="tns:findPermissionRequest" />
      <output message="tns:findPermissionResponse" />
    </operation>
    <operation name="managePermission">
      <input message="tns:managePermissionRequest" />
      <output message="tns:managePermissionResponse" />
    </operation>
  </portType>


  <binding name="PermissionServiceSoapBinding" type="tns:PermissionService">
    <soapbind:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"; />
    <operation name="addPermission">
      <soapbind:operation />
      <input>
        <soapbind:body use="literal" />
      </input>
      <output>
        <soapbind:body use="literal" />
      </output>
    </operation>
    <operation name="findPermission">
      <soapbind:operation />
      <input>
        <soapbind:body use="literal" />
      </input>
      <output>
        <soapbind:body use="literal" />
      </output>
    </operation>
    <operation name="managePermission">
      <soapbind:operation />
      <input>
        <soapbind:body use="literal" />
      </input>
      <output>
        <soapbind:body use="literal" />
      </output>
    </operation>
  </binding>

  <!-- P H O N E  S E R V I C E -->
  <message name="addPhoneResponse" />
  <message name="addPhoneRequest">
    <part name="addPhone" element="tns:AddPhone" />
  </message>

  <message name="findPhoneResponse">
    <part name="findPhoneResponse" element="tns:FindPhoneResponse" />
  </message>
  <message name="findPhoneRequest">
    <part name="findPhone" element="tns:FindPhone" />
  </message>

  <message name="managePhoneResponse" />
  <message name="managePhoneRequest">
    <part name="managePhone" element="tns:ManagePhone" />
  </message>

  <portType name="PhoneService">
    <documentation>
      Any change to phones requires generating profiles to get phone to update. See managePhone.
    </documentation>
    <operation name="addPhone">
      <input message="tns:addPhoneRequest" />
      <output message="tns:addPhoneResponse" />
    </operation>
    <operation name="findPhone">
      <input message="tns:findPhoneRequest" />
      <output message="tns:findPhoneResponse" />
    </operation>
    <operation name="managePhone">
      <input message="tns:managePhoneRequest" />
      <output message="tns:managePhoneResponse" />
    </operation>
  </portType>

  <binding name="PhoneServiceSoapBinding" type="tns:PhoneService">
    <soapbind:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"; />
    <operation name="addPhone">
      <soapbind:operation />
      <input>
        <soapbind:body use="literal" />
      </input>
      <output>
        <soapbind:body use="literal" />
      </output>
    </operation>
    <operation name="findPhone">
      <soapbind:operation />
      <input>
        <soapbind:body use="literal" />
      </input>
      <output>
        <soapbind:body use="literal" />
      </output>
    </operation>
    <operation name="managePhone">
      <soapbind:operation />
      <input>
        <soapbind:body use="literal" />
      </input>
      <output>
        <soapbind:body use="literal" />
      </output>
    </operation>
  </binding>

  <!-- T E S T  S E R V I C E -->
  <message name="resetServicesResponse" />
  <message name="resetServicesRequest">
    <part name="resetServices" element="tns:ResetServices" />
  </message>

  <portType name="TestService">
    <operation name="resetServices">
      <input message="tns:resetServicesRequest" />
      <output message="tns:resetServicesResponse" />
    </operation>
  </portType>

  <binding name="TestServiceSoapBinding" type="tns:TestService">
    <soapbind:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"; />
    <operation name="resetServices">
      <soapbind:operation />
      <input name="resetServicesRequest">
        <soapbind:body use="literal" />
      </input>
      <output name="resetServicesResponse">
        <soapbind:body use="literal" />
      </output>
    </operation>
  </binding>

  <!-- U S E R   S E R V I C E -->
  <message name="addUserResponse" />
  <message name="addUserRequest">
    <part name="addUser" element="tns:AddUser" />
  </message>

  <message name="findUserResponse">
    <part name="findUserResponse" element="tns:FindUserResponse" />
  </message>
  <message name="findUserRequest">
    <part name="findUser" element="tns:FindUser" />
  </message>

  <message name="manageUserResponse" />
  <message name="manageUserRequest">
    <part name="manageUser" element="tns:ManageUser" />
  </message>

  <portType name="UserService">
    <documentation>
      To get all users, call findUser with an empty search argument. Any change to users updates all servers
      automatically and asynchronously.
    </documentation>
    <operation name="addUser">
      <input message="tns:addUserRequest" />
      <output message="tns:addUserResponse" />
    </operation>
    <operation name="findUser">
      <input message="tns:findUserRequest" />
      <output message="tns:findUserResponse" />
    </operation>
    <operation name="manageUser">
      <input message="tns:manageUserRequest" />
      <output message="tns:manageUserResponse" />
    </operation>
  </portType>

  <binding name="UserServiceSoapBinding" type="tns:UserService">
    <soapbind:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"; />
    <operation name="addUser">
      <soapbind:operation />
      <input>
        <soapbind:body use="literal" />
      </input>
      <output>
        <soapbind:body use="literal" />
      </output>
    </operation>
    <operation name="findUser">
      <soapbind:operation />
      <input>
        <soapbind:body use="literal" />
      </input>
      <output>
        <soapbind:body use="literal" />
      </output>
    </operation>
    <operation name="manageUser">
      <soapbind:operation />
      <input>
        <soapbind:body use="literal" />
      </input>
      <output>
        <soapbind:body use="literal" />
      </output>
    </operation>
  </binding>

  <!--  S Y S T E M   S E R V I C E -->
  <message name="systemInfoResponse">
    <part name="systemInfo" element="tns:SystemInfo" />
  </message>
  <message name="systemInfoRequest" />

  <portType name="SystemService">
    <documentation>System related information and functions</documentation>
    <operation name="systemInfo">
      <input message="tns:systemInfoRequest" />
      <output message="tns:systemInfoResponse" />
    </operation>
  </portType>

  <binding name="SystemServiceSoapBinding" type="tns:SystemService">
    <soapbind:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"; />
    <operation name="systemInfo">
      <soapbind:operation />
      <input>
        <soapbind:body use="literal" />
      </input>
      <output>
        <soapbind:body use="literal" />
      </output>
    </operation>
  </binding>

  <!-- S E R V I C E S -->
  <service name="ConfigImplService">
    <port name="CallGroupService" binding="tns:CallGroupServiceSoapBinding">
      <soapbind:address location="http://localhost:9999/sipxconfig/services/CallGroupService"; />
    </port>
    <port name="ParkOrbitService" binding="tns:ParkOrbitServiceSoapBinding">
      <soapbind:address location="http://localhost:9999/sipxconfig/services/ParkOrbitService"; />
    </port>
    <port name="PermissionService" binding="tns:PermissionServiceSoapBinding">
      <soapbind:address location="http://localhost:9999/sipxconfig/services/PermissionService"; />
    </port>
    <port name="PhoneService" binding="tns:PhoneServiceSoapBinding">
      <soapbind:address location="http://localhost:9999/sipxconfig/services/PhoneService"; />
    </port>
    <port name="TestService" binding="tns:TestServiceSoapBinding">
      <soapbind:address location="http://localhost:9999/sipxconfig/services/TestService"; />
    </port>
    <port name="UserService" binding="tns:UserServiceSoapBinding">
      <soapbind:address location="http://localhost:9999/sipxconfig/services/UserService"; />
    </port>
    <port name="SystemService" binding="tns:SystemServiceSoapBinding">
      <soapbind:address location="http://localhost:9999/sipxconfig/services/SystemService"; />
    </port>
  </service>

</definitions>
_______________________________________________
sipx-dev mailing list
[email protected]
List Archive: http://list.sipfoundry.org/archive/sipx-dev/

Reply via email to