/*
 * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
 *
 * WSO2 Inc. licenses this file to you 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.
 */

package org.wso2.carbon.identity.application.authentication.endpoint.util;

import org.apache.axis2.AxisFault;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
import org.wso2.carbon.identity.user.registration.stub.UserRegistrationAdminServiceException;
import org.wso2.carbon.identity.user.registration.stub.UserRegistrationAdminServiceIdentityException;
import org.wso2.carbon.identity.user.registration.stub.UserRegistrationAdminServiceStub;
import org.wso2.carbon.identity.user.registration.stub.dto.UserDTO;
import org.wso2.carbon.identity.user.registration.stub.dto.UserFieldDTO;

import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.List;
import java.util.Map;
import java.util.Properties;

public class UserRegistrationAdminServiceClient {


    private UserRegistrationAdminServiceStub stub;
    private Properties prop;

    public UserRegistrationAdminServiceClient() throws AxisFault {

        StringBuilder builder = new StringBuilder();
        String serviceURL = null;

        serviceURL = builder.append(TenantDataManager.getPropertyValue(Constants.SERVICES_URL)).append
                (Constants.UserRegistrationConstants.USER_REGISTRATION_SERVICE).toString().replaceAll("(?<!(http:|https:))//", "/");

        stub = new UserRegistrationAdminServiceStub(serviceURL);

        ServiceClient client = stub._getServiceClient();
        Options option = client.getOptions();
        option.setManageSession(true);
    }

    /**
     * Add new user.
     * @param username Username of the user.
     * @param password Password of the user.
     * @param userFields User fields to be updated.
     * @throws RemoteException
     * @throws UserRegistrationAdminServiceException
     */
    public void addUser(String username, char[] password, List<UserFieldDTO> userFields) throws RemoteException,
            UserRegistrationAdminServiceException {

        UserDTO userDTO = new UserDTO();
        userDTO.setUserName(username);
        userDTO.setPassword(new String(password));

        userDTO.setUserFields(userFields.toArray(new UserFieldDTO[userFields.size()]));
        stub.addUser(userDTO);
    }

    /**
     * Get the user fields for given dialect.
     * @param dialect Dialect to use.
     * @return User fields.
     * @throws UserRegistrationAdminServiceIdentityException
     * @throws RemoteException
     */
    public UserFieldDTO[] readUserFieldsForUserRegistration(String dialect)
            throws UserRegistrationAdminServiceIdentityException, RemoteException {

        return stub.readUserFieldsForUserRegistration(dialect);
    }

    /**
     * Check whether the user exists.
     * @param username Username of the user.
     * @return True if user exists.
     * @throws RemoteException
     * @throws UserRegistrationAdminServiceException
     */
    public boolean isUserExist(String username) throws RemoteException, UserRegistrationAdminServiceException {

        return stub.isUserExist(username);
    }

}

@@ -1293,104 +1293,8 @@
 O;%0A%0A
-import java.net.MalformedURLException;%0Aimport java.net.URISyntaxException;%0Aimport java.net.URL;%0A
 impo
@@ -1349,30 +1349,8 @@
 st;%0A
-import java.util.Map;%0A
 impo

Set service URL's of authentication endpoint configurable - remove unused imports