//* Licensed Materials - Property of IBM *
//* eu.abc4trust.pabce.1.14 *
//* (C) Copyright IBM Corp. 2012. All Rights Reserved. *
//* US Government Users Restricted Rights - Use, duplication or *
//* disclosure restricted by GSA ADP Schedule Contract with IBM Corp. *
//* *
//* This file is 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. *
//*/**/****************************************************************
package eu.abc4trust.ri.ui.user.wizard;
import javax.ws.rs.core.MediaType;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import javax.xml.namespace.QName;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.wizard.IWizard;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Shell;
import com.eu.fiware.combineddemo.fiwarelibs.IssuanceRequest;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.GenericType;
import com.sun.jersey.api.client.WebResource;
import eu.abc4trust.returnTypes.IssuanceReturn;
import eu.abc4trust.returnTypes.UiIssuanceReturn;
import eu.abc4trust.returnTypes.ui.CredentialInUi;
import eu.abc4trust.ri.ui.user.Container;
import eu.abc4trust.xml.CredentialDescription;
import eu.abc4trust.xml.CredentialSpecification;
import eu.abc4trust.xml.IssuanceMessage;
import eu.abc4trust.xml.IssuerParameters;
import eu.abc4trust.xml.ObjectFactory;
public class IssueWizardDialog extends WizardDialog {
public static class ProtocolHandler {
// # Init issuance protocol (first step for the issuer).
// echo "Init issuance protocol"
// curl -X POST --header 'Content-Type: text/xml' -d
// @tutorial-resources/issuancePolicyAndAttributes.xml
// 'http://localhost:9100/issuer/initIssuanceProtocol/' >
// issuanceMessageAndBoolean.xml
private static JAXBElement<IssuanceMessage> initIssuanceProtocolAtIssuer(
IssueWizard wizard) throws JAXBException {
com.eu.fiware.combineddemo.fiwarelibs.IssuanceRequest ir = new IssuanceRequest();
ir.setUsername(wizard.getPageOne().getUsername());
ir.setPassword(wizard.getPageOne().getPassword());
ir.setCredentialSpecificationUID(wizard.getPageOne()
.getCredentialUid());
Client client = Client.create();
WebResource resource = client.resource(wizard.getPageOne()
.getIssuerRoot() + "initIssuanceProtocol");
return resource.type(MediaType.APPLICATION_XML).accept(MediaType.APPLICATION_XML)
.post(new GenericType<JAXBElement<IssuanceMessage>>() {
}, ir);
}
// # First issuance protocol step (first step for the
// user).
// echo "First issuance protocol step for the user"
// curl -X POST --header 'Content-Type: text/xml' -d
// @firstIssuanceMessage.xml
// 'http://localhost:9200/user/issuanceProtocolStep/' >
// issuanceReturn.xml
private static JAXBElement<IssuanceReturn> normalIssuanceProtocolStepAtUser(
JAXBElement<IssuanceMessage> im) {
Client client = Client.create();
WebResource resource = client
.resource("http://localhost:9200/user/issuanceProtocolStep/");
return resource.type(MediaType.TEXT_XML).accept(MediaType.TEXT_XML)
.post(new GenericType<JAXBElement<IssuanceReturn>>() {
}, im);
}
// # First issuance protocol step - UI (first step for
// the user).
// echo
// "Second issuance protocol step (first step for the user)"
// curl -X POST --header 'Content-Type: text/xml' -d
// @uiIssuanceReturn.xml
// 'http://localhost:9200/user/issuanceProtocolStepUi/'
// > secondIssuanceMessage.xml
private static JAXBElement<IssuanceMessage> uiIssuanceProtocolStepAtUser(
JAXBElement<UiIssuanceReturn> juir) {
Client client = Client.create();
WebResource resource = client
.resource("http://localhost:9200/user/issuanceProtocolStepUi/");
return resource.type(MediaType.TEXT_XML).accept(MediaType.TEXT_XML)
.post(new GenericType<JAXBElement<IssuanceMessage>>() {
}, juir.getValue());
}
// # Second issuance protocol step (second step for the
// issuer).
// echo
// "Second issuance protocol step (second step for the issuer)"
// curl -X POST --header 'Content-Type: text/xml' -d
// @secondIssuanceMessage.xml
// 'http://localhost:9100/issuer/issuanceProtocolStep/'
// > thirdIssuanceMessageAndBoolean.xml
private static JAXBElement<IssuanceMessage> normalIssuanceProtocolStepAtIssuer(
JAXBElement<IssuanceMessage> sim, IssueWizard wizard) {
Client client = Client.create();
WebResource resource = client.resource(wizard.getPageOne()
.getIssuerRoot() + "issuanceProtocolStep");
return resource.type(MediaType.TEXT_XML).accept(MediaType.TEXT_XML)
.post(new GenericType<JAXBElement<IssuanceMessage>>() {
}, sim);
}
public static void doProtocol(IssueWizard wizard) {
try {
JAXBElement<IssuanceMessage> initResponse = initIssuanceProtocolAtIssuer(wizard);
JAXBElement<IssuanceReturn> returnFromUser = normalIssuanceProtocolStepAtUser(initResponse);
UiIssuanceReturn fakeUiReturn = new UiIssuanceReturn();
fakeUiReturn.uiContext = returnFromUser.getValue().uia.uiContext;
JAXBElement<UiIssuanceReturn> jaxbFakeUiReturn = new JAXBElement<UiIssuanceReturn>(
new QName("UiIssuanceReturn"), UiIssuanceReturn.class,
fakeUiReturn);
JAXBElement<IssuanceMessage> uiIssuanceReturnFromUser = uiIssuanceProtocolStepAtUser(jaxbFakeUiReturn);
JAXBElement<IssuanceMessage> lastReturnFromIssuer = normalIssuanceProtocolStepAtIssuer(
uiIssuanceReturnFromUser, wizard);
JAXBElement<IssuanceReturn> lastReturnFromUser = normalIssuanceProtocolStepAtUser(lastReturnFromIssuer);
CredentialDescription cd = lastReturnFromUser.getValue().cd;
JAXBContext jaxbContext1;
jaxbContext1 = JAXBContext.newInstance(IssuerParameters.class);
Unmarshaller jaxbUnmarshaller1 = jaxbContext1
.createUnmarshaller();
@SuppressWarnings("unchecked")
JAXBElement<IssuerParameters> ip = (JAXBElement<IssuerParameters>) jaxbUnmarshaller1
.unmarshal(IssueWizardDialog.class
.getResourceAsStream("/fiware-demo/issuer_params_nsn_correct.xml"));
JAXBContext jaxbContext2;
jaxbContext2 = JAXBContext.newInstance(ObjectFactory.class);
Unmarshaller jaxbUnmarshaller2 = jaxbContext2
.createUnmarshaller();
@SuppressWarnings("unchecked")
JAXBElement<CredentialSpecification> cp = (JAXBElement<CredentialSpecification>) jaxbUnmarshaller2
.unmarshal(IssueWizardDialog.class
.getResourceAsStream("/fiware-demo/credentialSpecificationFiwareUser.xml"));
CredentialInUi cdui = new CredentialInUi(cd, ip.getValue(),
cp.getValue(), null);
Container.INSTANCE.addCredential(cdui);
} catch (Throwable ex) {
ex.printStackTrace();
}
wizard.refreshSecondPage();
}
}
private static final long serialVersionUID = -4692040141254024387L;
IssueWizard wizard;
public IssueWizardDialog(Shell parentShell, IWizard newWizard) {
super(parentShell, newWizard);
this.wizard = (IssueWizard) newWizard;
}
@Override
protected void createButtonsForButtonBar(Composite parent) {
super.createButtonsForButtonBar(parent);
Button ok = getButton(IDialogConstants.NEXT_ID);
ok.setText("Get credential!");
setButtonLayoutData(ok);
ok.addMouseListener(new MouseListener() {
private static final long serialVersionUID = 6732595815149773092L;
@Override
public void mouseDoubleClick(MouseEvent arg0) {
}
@Override
public void mouseDown(MouseEvent arg0) {
ProtocolHandler.doProtocol(wizard);
}
@Override
public void mouseUp(MouseEvent arg0) {
}
});
Button finish = getButton(IDialogConstants.FINISH_ID);
finish.setText("Thanks!");
setButtonLayoutData(finish);
Button cancel = getButton(IDialogConstants.CANCEL_ID);
cancel.setText("I changed my mind");
setButtonLayoutData(cancel);
}
}