io.proximax.xpx.service.local.LocalSearchApi Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of xpx-java-sdk Show documentation
Show all versions of xpx-java-sdk Show documentation
Proximax P2P File Storage Java SDK (NIS1 Compatible)
/*
* Copyright 2018 ProximaX Limited
*
* 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.
*/
/*
* Proximax P2P Storage REST API
* Proximax P2P Storage REST API
*
* OpenAPI spec version: v0.0.1
* Contact: [email protected]
*
* NOTE: This class is auto generated by the swagger code generator program.
* https://github.com/swagger-api/swagger-codegen.git
* Do not edit the class manually.
*/
package io.proximax.xpx.service.local;
import io.proximax.xpx.exceptions.ApiException;
import io.proximax.xpx.model.ResourceHashMessageJsonEntity;
import io.proximax.xpx.service.NemTransactionApi;
import io.proximax.xpx.service.common.PrivateSearchApi;
import io.proximax.xpx.service.intf.SearchApi;
import io.proximax.xpx.service.model.buffers.ResourceHashMessage;
import io.proximax.xpx.utils.JsonUtils;
import org.apache.commons.codec.binary.Base64;
import org.nem.core.crypto.PublicKey;
import org.nem.core.model.Address;
import org.nem.core.model.TransferTransaction;
import org.nem.core.model.ncc.TransactionMetaDataPair;
import org.pmw.tinylog.Logger;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutionException;
/**
* The Class LocalSearchApi.
*/
public class LocalSearchApi extends PrivateSearchApi implements SearchApi {
/** The proximax transaction api. */
private final NemTransactionApi nemTransactionApi;
/**
* Instantiates a new local search api.
*
* @param nemTransactionApi the proximax transaction api
*/
public LocalSearchApi(NemTransactionApi nemTransactionApi) {
super(nemTransactionApi);
this.nemTransactionApi = nemTransactionApi;
}
/* (non-Javadoc)
* @see io.proximax.xpx.service.intf.SearchApi#searchTransactionWithKeywordUsingGET(java.lang.String, java.lang.String)
*/
@Override
public List searchTransactionWithKeywordUsingGET(String xPubkey, String keywords)
throws ApiException, InterruptedException, ExecutionException {
PublicKey pbKey = PublicKey.fromHexString(xPubkey);
Address address = Address.fromPublicKey(pbKey);
String publicKeyAddress = address.toString();
List listOfTransactionMetadataPair = nemTransactionApi
.getAllTransactions(publicKeyAddress);
List encryptedMessage = new ArrayList();
// loop thru and search for any keyword.
String currentHash = "";
for (TransactionMetaDataPair tmp : listOfTransactionMetadataPair) {
currentHash = tmp.getMetaData().getHash().toString();
// we only process plain. We don't have access to the secure
// messages at this point.
if (tmp.getEntity() instanceof TransferTransaction) {
TransferTransaction transferTransaction = (TransferTransaction) tmp.getEntity();
if (checkIfTxnHaveXPXMosaic(transferTransaction)) {
try {
if (transferTransaction.getMessage().getType() == 1) {
boolean found = false;
ResourceHashMessage resourceMessage = ResourceHashMessage
.getRootAsResourceHashMessage(ByteBuffer.wrap(
Base64.decodeBase64(transferTransaction.getMessage().getDecodedPayload())));
String[] commaSeparatedkeywordsSplit = keywords.split(",");
for (String keyword : commaSeparatedkeywordsSplit) {
if (resourceMessage.keywords().contains(keyword)) {
found = true;
break;
}
}
if (found) {
encryptedMessage.add(toEntity(currentHash,resourceMessage));
}
}
} catch (Exception e) {
continue;
}
}
}
}
return encryptedMessage;
}
/* (non-Javadoc)
* @see io.proximax.xpx.service.intf.SearchApi#searchAllPublicTransactionWithMetadataKeyValuePair(java.lang.String, java.lang.String, java.lang.String)
*/
@Override
public List searchTransactionWithMetadataUsingGET(String xPubkey, String key, String value)
throws InterruptedException, ExecutionException, ApiException {
PublicKey pbKey = PublicKey.fromHexString(xPubkey);
Address address = Address.fromPublicKey(pbKey);
String publicKeyAddress = address.toString();
List listOfTransactionMetadataPair = nemTransactionApi
.getAllTransactions(publicKeyAddress);
List encryptedMessage = new ArrayList();
// loop thru and search for any keyword.
for (TransactionMetaDataPair tmp : listOfTransactionMetadataPair) {
// we only process plain. We don't have access to the secure
// messages at this point.
String currentHash = "";
if (tmp.getEntity() instanceof TransferTransaction) {
TransferTransaction transferTransaction = (TransferTransaction) tmp.getEntity();
currentHash = tmp.getMetaData().getHash().toString();
if (checkIfTxnHaveXPXMosaic(transferTransaction)) {
try {
if (transferTransaction.getMessage().getType() == 1) {
boolean found = false;
ResourceHashMessage resourceMessage = ResourceHashMessage
.getRootAsResourceHashMessage(ByteBuffer.wrap(
Base64.decodeBase64(transferTransaction.getMessage().getDecodedPayload())));
if (resourceMessage.metaData() != null) {
@SuppressWarnings("unchecked")
Map jsonToMap = JsonUtils.fromJson(resourceMessage.metaData(), Map.class);
if (jsonToMap.containsKey(key) && jsonToMap.get(key).equals(value)) {
found = true;
}
}
if (found) {
encryptedMessage.add(toEntity(currentHash,resourceMessage));
}
}
} catch (Exception e) {
Logger.info("Error on decoding NEM Transaction Message." + e.getMessage());
continue;
}
}
}
}
return encryptedMessage;
}
/* (non-Javadoc)
* @see io.proximax.xpx.service.intf.SearchApi#searchTransactionWithMetadataKeyValuePair(java.lang.String, java.lang.String, java.lang.String, java.lang.String)
*/
@Override
public List searchTransactionWithMetadataKeyValuePair(String xPvKey, String xPubkey,
String key, String value) throws ApiException, InterruptedException, ExecutionException {
return super.searchTransactionWithMetadataKeyValuePair(xPvKey, xPubkey, key, value);
}
/* (non-Javadoc)
* @see io.proximax.xpx.service.intf.SearchApi#searchTransactionWithKeywordUsingGET(java.lang.String, java.lang.String, java.lang.String)
*/
@Override
public List searchTransactionWithKeywordUsingGET(String xPvKey, String xPubkey,
String keywords) throws ApiException, InterruptedException, ExecutionException {
return super.searchTransactionWithKeyword(xPvKey, xPubkey, keywords);
}
/* (non-Javadoc)
* @see io.proximax.xpx.service.intf.SearchApi#searchTransactionWithNameUsingGET(java.lang.String, java.lang.String, java.lang.String)
*/
@Override
public List searchTransactionWithNameUsingGET(String xPvKey, String xPubkey,
String name) throws ApiException, InterruptedException, ExecutionException {
return super.searchTransactionWithKeyword(xPvKey, xPubkey, name);
}
}