Skip to content

Commit

Permalink
comply with new xml with namespace
Browse files Browse the repository at this point in the history
  • Loading branch information
lyhistory committed Nov 21, 2018
1 parent 2ef02e7 commit 1875b07
Show file tree
Hide file tree
Showing 7 changed files with 346 additions and 890 deletions.
1,048 changes: 196 additions & 852 deletions contracts/MeetupContract.xml

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package io.stormbird.token.management.CustomComponents;

import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

public class JTextFieldLimit extends PlainDocument {
private int limit;
public JTextFieldLimit(int limit){
super();
this.limit = limit;
}
JTextFieldLimit(int limit, boolean upper){
super();
this.limit = limit;
}

public void insertString(int offset, String str, AttributeSet attr) throws BadLocationException{
if(str == null)
return;
if((getLength() + str.length()) <= limit){
super.insertString(offset, str, attr);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package io.stormbird.token.management;

import com.sun.media.sound.MidiOutDeviceProvider;
import io.stormbird.token.entity.EthereumReadBuffer;
import io.stormbird.token.management.CustomComponents.DateTimePicker;
import io.stormbird.token.management.CustomComponents.JTextFieldLimit;
import io.stormbird.token.management.Model.*;
import io.stormbird.token.management.Util.KeyStoreManager;
import io.stormbird.token.management.Util.MeetupContractHelper;
Expand All @@ -13,6 +15,7 @@
import org.json.JSONObject;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.web3j.crypto.Credentials;
import org.web3j.crypto.Sign;
Expand Down Expand Up @@ -78,21 +81,37 @@ public class MagicLinkTool extends JFrame{
private TokenViewModel _tokenViewModel;
private Map<Integer, MagicLinkToolViewModel> _magicLinkViewMap;
private static ArrayList<MagicLinkDataModel> _magicLinkDataModelArrayList;
MeetupContractHelper contractHelper;
public MagicLinkTool(){
try {
Map<String,String> keys = loadWalletFromKeystore();

private MeetupContractHelper contractHelper;

private Map<String,String> keys;

private void initContract() throws IOException, SAXException {
if(keys==null){
keys = loadWalletFromKeystore();
}
File f = new File(ticketXMLFilePath);
if (f.exists()==true) {

_tokenViewModel = new TokenViewModel(new FileInputStream(ticketXMLFilePath), Locale.getDefault());
if(_tokenViewModel.comboBoxContractAddressList!=null
if (_tokenViewModel.comboBoxContractAddressList != null
&&
keys!=null&&keys.size()>0) {
contractHelper = new MeetupContractHelper(_tokenViewModel.comboBoxContractAddressList.get(0).getKey(), keys.entrySet().iterator().next().getValue());
keys != null && keys.size() > 0) {
contractHelper = new MeetupContractHelper(_tokenViewModel.comboBoxContractAddressList.get(0).getKey(),
_tokenViewModel.comboBoxContractAddressList.get(0).getValue(),
keys.entrySet().iterator().next().getValue());
}
}
}
public MagicLinkTool(){
try {

initContract();
_magicLinkViewMap = new ConcurrentHashMap<>();
_magicLinkDataModelArrayList = loadMagicLinksFromCSV();

this.setJMenuBar(createMenuBar());
this.initUpperPane(keys); //Private key Dropdownlist
this.initUpperPane(); //Private key Dropdownlist
this.initTabPane(); //Magic Link Generation Pane
this.mainSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, mainSplitPane_topPane, mainSplitPane_tabPane);
//this.mainSplitPane.setMinimumSize(new Dimension(900,300));
Expand Down Expand Up @@ -176,7 +195,7 @@ public void actionPerformed(ActionEvent e) {
}

//create UpperPane: manage private key
private void initUpperPane(Map<String,String> keys) {
private void initUpperPane() {

mainSplitPane_topPane = new JPanel();
FlowLayout flowLayout = new FlowLayout();
Expand Down Expand Up @@ -228,7 +247,7 @@ public void actionPerformed(ActionEvent e) {
}

//create TabPane: manage magic link creation
private void initTabPane(){
private void initTabPane() throws IOException, SAXException {
//init tabpane
mainSplitPane_tabPane = new JTabbedPane();
tabPane_container = new JPanel();
Expand Down Expand Up @@ -256,6 +275,7 @@ private void initWizard(){
JComboBox comboBoxNetworkID=new JComboBox();
comboBoxNetworkID.addItem(new ComboBoxSimpleItem("mainnet", "1"));
comboBoxNetworkID.addItem(new ComboBoxSimpleItem("Ropsten", "3"));
comboBoxNetworkID.addItem(new ComboBoxSimpleItem("CustomRPC", "0"));

JPanel centerPane = new JPanel();
centerPane.add(new JLabel("Contract Address:"));
Expand Down Expand Up @@ -293,20 +313,21 @@ public void actionPerformed(ActionEvent e) {
tabPane_wizard.add(southPane,BorderLayout.SOUTH);
tabPane_container.add(tabPane_wizard);
}
private void initTabPaneContainer(){
private void initTabPaneContainer() throws IOException, SAXException {

//TopPane: contract address
JPanel northPane = new JPanel();
northPane.add(new JLabel("Contract:"));
comboBoxContractAddress = new JComboBox();
if(_tokenViewModel==null){
initContract();
}
for(ComboBoxSimpleItem item : _tokenViewModel.comboBoxContractAddressList) {
comboBoxContractAddress.addItem(item);
comboBoxContractAddress.setEnabled(true);
}
northPane.add(comboBoxContractAddress);



//CenterPane: main container for magic link
GridBagConstraints col1Constraints = new GridBagConstraints();
col1Constraints.fill = GridBagConstraints.BOTH;
Expand Down Expand Up @@ -376,7 +397,11 @@ private void initMagicLinkCreationColumnTitle(){
for(TextFieldDataModel model : _tokenViewModel.textFieldDataModelList){
GridBagConstraints colConstraints = getGridConstraints(gridx,gridy,0.4,0);
JLabel labelAttrName = new JLabel();
labelAttrName.setText(model.name);
if(model.getPlaceholder()!=null&&model.getPlaceholder()!=""){
labelAttrName.setText(model.getName()+"("+model.getPlaceholder()+")");
}else {
labelAttrName.setText(model.getName());
}
tabPane_container_centerPane.add(labelAttrName,colConstraints);
gridx++;
}
Expand Down Expand Up @@ -469,7 +494,11 @@ public void warn() {

magicLinkViewModel.setDateTimePickerMap(dateTimePickerTime,timeZoneTime,model);
}else {
JTextField textFieldInput = new JTextField();
JTextField textFieldInput;
textFieldInput = new JTextField();
if(model.getLengthlimit()>0){
textFieldInput.setDocument(new JTextFieldLimit(model.getLengthlimit()));
}
textFieldInput.setName(model.id);
textFieldInput.setEditable(enabled);
textFieldInput.setEnabled(enabled);
Expand Down Expand Up @@ -985,31 +1014,28 @@ public void updateContractAddress(String networkid, String contractAddress){
Transformer transformer=null;
try {
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
dbFactory.setNamespaceAware(true);
dBuilder = dbFactory.newDocumentBuilder();
xml = dBuilder.parse(ticketXMLTemplate);
TransformerFactory transformerFactory = TransformerFactory.newInstance();
transformer = transformerFactory.newTransformer();
createFileIfNotExists(ticketXMLFilePath);

xml.getDocumentElement().normalize(); // also good for parcel
NodeList contractList = xml.getElementsByTagName("contract");
//.getElementById("holding_contract");
for(int i=0;i<contractList.getLength();++i){
Element ele = (Element)contractList.item(i);
if(ele.getAttribute("id").equals("holding_contract")){
NodeList addressNodes = ele.getElementsByTagName("address");
int size = addressNodes.getLength();
for(int j=0;j<size;j++){
ele.removeChild(addressNodes.item(0));
}
Element newNode = xml.createElement("address");
newNode.setAttribute("network",networkid);
newNode.setTextContent(contractAddress);
ele.appendChild(newNode);
break;
NodeList nList = xml.getElementsByTagNameNS("http://attestation.id/ns/tbml","contract");
Element contract = (Element) nList.item(0);

if(contract.getAttribute("id").equals("holding_contract")) {
nList = contract.getElementsByTagNameNS("http://attestation.id/ns/tbml", "address");
int size = nList.getLength();
for (int j = 0; j < size; j++) {
contract.removeChild(nList.item(0));
}
Element newNode = xml.createElement(contract.getPrefix()+":address");
newNode.setAttribute("network", networkid);
newNode.setTextContent(contractAddress);
contract.appendChild(newNode);
}

DOMSource source = new DOMSource(xml);
StreamResult result = new StreamResult(new File(ticketXMLFilePath));
transformer.transform(source, result);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public void actionPerformed(ActionEvent e) {
String privateKey=privatekeyTextField.getText();
if(link!="") {
MagicLinkDataModel model=parseMagicLink(link);
MeetupContractHelper contractHelper = new MeetupContractHelper(contractAddr,privateKey);
MeetupContractHelper contractHelper = new MeetupContractHelper(contractAddr,"111",privateKey);
Sign.SignatureData sig = sigFromByteArray(model.signature);
contractHelper.redeemSpawnableToken(BigInteger.valueOf(model.expiry),Arrays.asList(model.tickets),sig.getV(),sig.getR(),sig.getS(),recepient);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ public class TextFieldDataModel {
public String as;
public String type;

public String placeholder;
public int lengthlimit;

public String getId(){
return this.id;
}
Expand Down Expand Up @@ -46,4 +49,9 @@ public String getType(){
public void setType(String type){
this.type=type;
}
public String getPlaceholder(){return this.placeholder;}
public void setPlaceholder(String placeholder){this.placeholder=placeholder;}
public int getLengthlimit(){return this.lengthlimit;}
public void setLengthlimit(int lengthlimit){this.lengthlimit=lengthlimit;}

}
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,12 @@ private void constructTokenViewModelForGUI(TokenDefinition ad){
textFieldDataModel.setBitshift(attr.bitshift);
textFieldDataModel.setType(attr.syntax.name());
textFieldDataModel.setAs(attr.as.name());
if(attr.as.name().equalsIgnoreCase("utf8")){
textFieldDataModel.setLengthlimit(attr.bitmask.bitCount()/8);
}
if(attr.name.equalsIgnoreCase("country")){
textFieldDataModel.setPlaceholder("e.g. US/CN");
}
this.textFieldDataModelList.add(textFieldDataModel);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,11 @@
import org.web3j.tx.gas.ContractGasProvider;
import org.web3j.tx.gas.DefaultGasProvider;

import java.io.IOException;
import java.math.BigInteger;
import java.net.ConnectException;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.List;

public class MeetupContractHelper {
Expand All @@ -21,14 +25,50 @@ public static enum RedeemStatus{
NotRedeemed,
Unknown
}
public MeetupContractHelper(String contractAddress,String privateKey){
web3j = Web3j.build(new HttpService
//("https://ropsten.infura.io/v3/3305734c1fad4ad1ab11fd0e9a74059e"));
("http://127.0.0.1:8545"));
public static boolean connected=false;

private static boolean pingEndPoint(String host, int port, int timeout){
try(Socket socket = new Socket()){
socket.connect(new InetSocketAddress(host,port),timeout);
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
public MeetupContractHelper(String contractAddress,String networkid,String privateKey){
String host,port,url;
switch (networkid){
case "1":
host="https://infura.io/v3/3305734c1fad4ad1ab11fd0e9a74059e";
port="80";
break;
case "2":
host="";
port="";
break;
case "3":
host="https://ropsten.infura.io/v3/3305734c1fad4ad1ab11fd0e9a74059e";
port="80";
break;
default:
host="http://127.0.0.1";
port="8545";
break;
}
if(port.equals("80")){
url=host;
}else{
url=host+":"+port;
}
// new Thread(()->{
// connected = pingEndPoint(host, Integer.valueOf(port),3);
// }).start();
web3j = Web3j.build(new HttpService(url));
credentials =
Credentials.create(privateKey);
contractGasProvider = new DefaultGasProvider();
contract = TicketPro.load(contractAddress,web3j,credentials,contractGasProvider);
contract = TicketPro.load(contractAddress, web3j, credentials, contractGasProvider);
}
public RedeemStatus checkSpawnableTokenRedeemStatus(BigInteger tokenID){
try {
Expand All @@ -38,7 +78,11 @@ public RedeemStatus checkSpawnableTokenRedeemStatus(BigInteger tokenID){
}else{
return RedeemStatus.NotRedeemed;
}
} catch (Exception e) {
}catch (ConnectException e){
connected = false;
e.printStackTrace();
return RedeemStatus.Unknown;
}catch (Exception e) {
e.printStackTrace();
return RedeemStatus.Unknown;
}
Expand All @@ -52,6 +96,9 @@ public void redeemSpawnableToken(BigInteger expiry, List<BigInteger> tickets, by
TransactionReceipt transactionReceipt = contract.spawnPassTo(expiry,tickets,biV,r,s,recipient).send();
boolean spawned = contract.spawned(tickets.get(0)).send();
String getTheContractAddress = contract.getTheContractAddress().send();
}catch (ConnectException e){
connected = false;
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
Expand Down

0 comments on commit 1875b07

Please sign in to comment.