/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF 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.apache.servicemix.soap.handlers.security;

import java.security.KeyStoreException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.cert.Certificate;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.security.auth.callback.CallbackHandler;

import org.apache.servicemix.common.security.KeystoreInstance;
import org.apache.servicemix.common.security.KeystoreManager;
import org.apache.ws.security.WSSecurityException;
import org.apache.ws.security.components.crypto.CryptoType;

public class KeystoreInstanceCrypto extends BaseCrypto {

    private KeystoreInstance keystore;
    
    public KeystoreInstanceCrypto() {
    }
    
    public KeystoreInstanceCrypto(KeystoreInstance keystore) {
        this.keystore = keystore;
    }
    
    public KeystoreInstanceCrypto(KeystoreManager keystoreManager, String keystore) {
        this.keystore = keystoreManager.getKeystore(keystore);
    }
    
    /**
     * @return the keystore
     */
    public KeystoreInstance getKeystore() {
        return keystore;
    }

    /**
     * @param keystore the keystore to set
     */
    public void setKeystore(KeystoreInstance keystore) {
        this.keystore = keystore;
    }

    protected String[] getAliases() throws KeyStoreException {
        String[] pks = keystore.listPrivateKeys();
        String[] tcs = keystore.listTrustCertificates();
        List aliases = new ArrayList();
        aliases.addAll(Arrays.asList(pks));
        aliases.addAll(Arrays.asList(tcs));
        return (String[]) aliases.toArray(new String[aliases.size()]);
    }

    protected Certificate getCertificate(String alias) throws KeyStoreException {
        return keystore.getCertificate(alias);
    }

    protected String getCertificateAlias(Certificate cert) throws KeyStoreException {
        return keystore.getCertificateAlias(cert);
    }

    protected Certificate[] getCertificateChain(String alias) throws KeyStoreException {
        return keystore.getCertificateChain(alias);
    }

    public PrivateKey getPrivateKey(String alias, String password) throws WSSecurityException {
        return keystore.getPrivateKey(alias);
    }

    protected String[] getTrustCertificates() throws KeyStoreException {
        return keystore.listTrustCertificates();
    }

    public String getCryptoProvider() {
        // TODO Auto-generated method stub
        return null;
    }

    public void setCryptoProvider(String provider) {
        // TODO Auto-generated method stub
        
    }

    public String getDefaultX509Identifier() throws WSSecurityException {
        // TODO Auto-generated method stub
        return null;
    }

    public void setDefaultX509Identifier(String identifier) {
        // TODO Auto-generated method stub
        
    }

    public void setCertificateFactory(String provider, CertificateFactory certFactory) {
        // TODO Auto-generated method stub
        
    }

    public byte[] getBytesFromCertificates(X509Certificate[] certs) throws WSSecurityException {
        // TODO Auto-generated method stub
        return null;
    }

    public X509Certificate[] getCertificatesFromBytes(byte[] data) throws WSSecurityException {
        // TODO Auto-generated method stub
        return null;
    }

    public X509Certificate[] getX509Certificates(CryptoType cryptoType) throws WSSecurityException {
        // TODO Auto-generated method stub
        return null;
    }

    public String getX509Identifier(X509Certificate cert) throws WSSecurityException {
        // TODO Auto-generated method stub
        return null;
    }

    public PrivateKey getPrivateKey(X509Certificate certificate, CallbackHandler callbackHandler)
        throws WSSecurityException {
        // TODO Auto-generated method stub
        return null;
    }

    public boolean verifyTrust(X509Certificate[] certs) throws WSSecurityException {
        // TODO Auto-generated method stub
        return false;
    }

    public boolean verifyTrust(PublicKey publicKey) throws WSSecurityException {
        // TODO Auto-generated method stub
        return false;
    }

	public boolean verifyTrust(X509Certificate[] arg0, boolean arg1)
			throws WSSecurityException {
		// TODO Auto-generated method stub
		return false;
	}

}
