From 1875b07b90a8010bf1060d5236cd9d0e4c884b82 Mon Sep 17 00:00:00 2001 From: lyhistory Date: Thu, 22 Nov 2018 00:10:43 +0800 Subject: [PATCH] comply with new xml with namespace --- contracts/MeetupContract.xml | 1048 +++-------------- .../CustomComponents/JTextFieldLimit.java | 25 + .../token/management/MagicLinkTool.java | 88 +- .../management/Mock/RedeemSpawnableToken.java | 2 +- .../management/Model/TextFieldDataModel.java | 8 + .../management/Model/TokenViewModel.java | 6 + .../management/Util/MeetupContractHelper.java | 59 +- 7 files changed, 346 insertions(+), 890 deletions(-) create mode 100644 desktop/src/main/java/io/stormbird/token/management/CustomComponents/JTextFieldLimit.java diff --git a/contracts/MeetupContract.xml b/contracts/MeetupContract.xml index 3c7714fda1..8ae9b73367 100644 --- a/contracts/MeetupContract.xml +++ b/contracts/MeetupContract.xml @@ -1,862 +1,206 @@ - - - - - - - - - - -MJVWADdSI8p7RwR3uptlPL5LZmwtwBsclKTwVPEmWYs= - - - -kporx19FbGkNJaJAF4hMmpT6riH/lv2wdJdoMOIj8JVva5KIBc4eY0TW3tGz6sH7QwtAkDtb+n92 -41/ebewwRVGHqYQ6lsNiS1AXq14e3nnSQkBEB4IwJ/4svy57e2TqQsPgiYfyf0kNpvQnhIUbHX6z -zSg6McerMl4TIo7sE/+gUw== - - - Shankai - - -MIIFBzCCBK2gAwIBAgIQKCMFmlBLtxz6L27XkUOsHjAKBggqhkjOPQQDAjCBkDELMAkGA1UEBhMC -R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE -ChMRQ09NT0RPIENBIExpbWl0ZWQxNjA0BgNVBAMTLUNPTU9ETyBFQ0MgRG9tYWluIFZhbGlkYXRp -b24gU2VjdXJlIFNlcnZlciBDQTAeFw0xODA1MTEwMDAwMDBaFw0xOTA1MTEyMzU5NTlaMFAxITAf -BgNVBAsTGERvbWFpbiBDb250cm9sIFZhbGlkYXRlZDEUMBIGA1UECxMLUG9zaXRpdmVTU0wxFTAT -BgNVBAMTDHNrc3RyYXZlbC5jbjCBmzAQBgcqhkjOPQIBBgUrgQQAIwOBhgAEADc2VNAGlEOcdqeU -A0vaxIC8gCFb9FDF8ZrrlJwqhpO/ZmnTCWUfe4LoI1a37Zv7QejC2+vPhyP0q55PvUtJT9INARfc -VaG5jRpTw3ukSF1+ww/E/T6YqtrRV44U7rSF8XPTH0CmDrJD6z/b2aCXwcix4PByn8O6skTdZXOj -LEXifqcjo4IC4zCCAt8wHwYDVR0jBBgwFoAUu/oI4L9U7lr9FqQ1AgmppMjs/UswHQYDVR0OBBYE -FGyswybdwCsAau7aZaBGFEcL2XXmMA4GA1UdDwEB/wQEAwIFgDAMBgNVHRMBAf8EAjAAMB0GA1Ud -JQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjBPBgNVHSAESDBGMDoGCysGAQQBsjEBAgIHMCswKQYI -KwYBBQUHAgEWHWh0dHBzOi8vc2VjdXJlLmNvbW9kby5jb20vQ1BTMAgGBmeBDAECATBUBgNVHR8E -TTBLMEmgR6BFhkNodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9FQ0NEb21haW5WYWxpZGF0 -aW9uU2VjdXJlU2VydmVyQ0EuY3JsMIGFBggrBgEFBQcBAQR5MHcwTwYIKwYBBQUHMAKGQ2h0dHA6 -Ly9jcnQuY29tb2RvY2EuY29tL0NPTU9ET0VDQ0RvbWFpblZhbGlkYXRpb25TZWN1cmVTZXJ2ZXJD -QS5jcnQwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmNvbW9kb2NhLmNvbTApBgNVHREEIjAgggxz -a3N0cmF2ZWwuY26CEHd3dy5za3N0cmF2ZWwuY24wggEEBgorBgEEAdZ5AgQCBIH1BIHyAPAAdgDu -S723dc5guuFCaR+r4Z5mow9+X7By2IMAxHuJeqj9ywAAAWNOX8kpAAAEAwBHMEUCIEIb/jymAGpZ -LG4umW1TbfCe/7Sr5MEIYknkdRdd6I6qAiEA2pHlmnby7PaQwoZrFGqIPQEyJ6oChl+7VRrcoA4t -5JsAdgB0ftqDMa0zEJEhnM4lT0Jwwr/9XkIgCMY3NXnmEHvMVgAAAWNOX8mcAAAEAwBHMEUCIQC/ -LOBZaO136CYN7GYr+OODcLZ/AG2r7ge7BigCRSk8fQIgC/n33uxEZD+w3ENTxTdOhCTxvSW6BL71 -wFYJPkFHYWkwCgYIKoZIzj0EAwIDSAAwRQIhAIi6VxP/HzmR3rGw6f9M6FLiH0TNgn1EbARAluAV -bFTFAiBKJSQRqq66kI9yMPc1NJISGi8btpWfPiB78twtjuHe7A== - - - - - -
0xA66A3F08068174e8F005112A8b2c7A507a822335
-
0xd8e5f58de3933e1e35f9c65eb72cb188674624f3
- Ваучеры - Vouchers - 门票兑换券 - Cupones - Ваучеры - erc875 -
- - Blind Auction - - + + + + 0x16e58F9a98bc46a572CFb9ce28DDEeaf76AF645a + Ваучеры + Vouchers + 门票兑换券 + Cupones + Ваучеры + erc875 + + -
0xdecafbaddecafbaddecafbaddecafbaddecafbad
- Starwood Preferred Guest -
+ 0xdecafbaddecafbaddecafbaddecafbaddecafbad + Starwood Preferred Guest + - + - - valid - invited - discounted - https://482kdh4npg.execute-api.ap-southeast-1.amazonaws.com/dev/ - %name% can't be traded on the market - %name% 不能再在市场上交易 - Only %name% can be traded on the market - 只有%name%才可以在市场上交易 - - - valid - discounted - invited + + valid + invited + discounted + https://482kdh4npg.execute-api.ap-southeast-1.amazonaws.com/dev/ + %name% can't be traded on the market + %name% 不能再在市场上交易 + Only %name% can be traded on the market + 只有%name%才可以在市场上交易 + + + valid + discounted + invited -
0xdecafbaddecafbaddecafbaddecafbaddecafbad
- %name% can't be traded on the market - %name% 不能再在市场上交易 - Only %name% can be traded on the market - 只有%name%才可以在市场上交易 -
- - valid - discounted - https://app.awallet.io/ - %name% can't be traded with MagicLink - Only %name% can be traded with MagicLink - %name% 不能用MagicLink交易 - 只有末到期的票才可以用MagicLink交易 - - - discounted - invited - https://app.awallet.io/ - %name% can't be traded on the market - %name% 不能再在市场上交易 - - - expired - https://app.awallet.io:80/api/claimToken - %name% can't be imported - 不能收下%name% - - - valid - - Only %name% can be redeemed for paper tickets - 只有%name%才可以兑换纸票 - - - valid - decafbaddecafbad - Only %name% can be redeemed for paper tickets - 只有%name%才可以兑换纸票 - -
- - - Discount Tickets - 打折票 - (|category=打折票)(category=Discounted)) - - - Gift Ticket - 赠票 - gifted - - - Tickets not expired - 末到期票 - !expired - - - Expired Tickets - 已经过期的票 - expired - - - - - - - - - - - - - - - - - - - + 0xdecafbaddecafbaddecafbaddecafbaddecafbad + %name% can't be traded on the market + %name% 不能再在市场上交易 + Only %name% can be traded on the market + 只有%name%才可以在市场上交易 + + + valid + discounted + https://app.awallet.io/ + %name% can't be traded with MagicLink + Only %name% can be traded with MagicLink + %name% 不能用MagicLink交易 + 只有末到期的票才可以用MagicLink交易 + + + discounted + invited + https://app.awallet.io/ + %name% can't be traded on the market + %name% 不能再在市场上交易 + + + expired + https://app.awallet.io:80/api/claimToken + %name% can't be imported + 不能收下%name% + + + valid + + Only %name% can be redeemed for paper tickets + 只有%name%才可以兑换纸票 + + + valid + decafbaddecafbad + Only %name% can be redeemed for paper tickets + 只有%name%才可以兑换纸票 + + + + + Discount Tickets + 打折票 + (|category=打折票)(category=Discounted)) + + + Gift Ticket + 赠票 + gifted + + + Tickets not expired + 末到期票 + !expired + + + Expired Tickets + 已经过期的票 + expired + + + + + + + + + + + + + + + + + + + - - - - Country - 国家 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - City - 城市 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Time - 时间 - - - - No - 票号 - - - - Cat - 等级 - - - - Section - 区号 - - - - - isExpired - - - - - getStreet - TokenID - - - - - getBuildingName - TokenID - - - - - getState - TokenID - - - -
+ + + Country + 国家 + + + + City + 城市 + + + + + + + + + + Time + 时间 + + + + No + 票号 + + + + Cat + 等级 + + + + Section + 区号 + + + + + + + + + + + + FALSE + + + TRUE + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/desktop/src/main/java/io/stormbird/token/management/CustomComponents/JTextFieldLimit.java b/desktop/src/main/java/io/stormbird/token/management/CustomComponents/JTextFieldLimit.java new file mode 100644 index 0000000000..c30a98ad5d --- /dev/null +++ b/desktop/src/main/java/io/stormbird/token/management/CustomComponents/JTextFieldLimit.java @@ -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); + } + } +} diff --git a/desktop/src/main/java/io/stormbird/token/management/MagicLinkTool.java b/desktop/src/main/java/io/stormbird/token/management/MagicLinkTool.java index 13aaf65495..bcbabfcffd 100644 --- a/desktop/src/main/java/io/stormbird/token/management/MagicLinkTool.java +++ b/desktop/src/main/java/io/stormbird/token/management/MagicLinkTool.java @@ -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; @@ -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; @@ -78,21 +81,37 @@ public class MagicLinkTool extends JFrame{ private TokenViewModel _tokenViewModel; private Map _magicLinkViewMap; private static ArrayList _magicLinkDataModelArrayList; - MeetupContractHelper contractHelper; - public MagicLinkTool(){ - try { - Map keys = loadWalletFromKeystore(); + + private MeetupContractHelper contractHelper; + + private Map 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)); @@ -176,7 +195,7 @@ public void actionPerformed(ActionEvent e) { } //create UpperPane: manage private key - private void initUpperPane(Map keys) { + private void initUpperPane() { mainSplitPane_topPane = new JPanel(); FlowLayout flowLayout = new FlowLayout(); @@ -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(); @@ -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:")); @@ -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; @@ -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++; } @@ -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); @@ -985,6 +1014,7 @@ 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(); @@ -992,24 +1022,20 @@ public void updateContractAddress(String networkid, String contractAddress){ createFileIfNotExists(ticketXMLFilePath); xml.getDocumentElement().normalize(); // also good for parcel - NodeList contractList = xml.getElementsByTagName("contract"); - //.getElementById("holding_contract"); - for(int i=0;i{ +// 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 { @@ -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; } @@ -52,6 +96,9 @@ public void redeemSpawnableToken(BigInteger expiry, List 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(); }