2023-02-16 15:28:15 +08:00

217 lines
9.5 KiB
Java

package com.zhgd.xmgl.util;
import cn.hutool.json.JSONUtil;
import com.autodesk.client.ApiException;
import com.autodesk.client.ApiResponse;
import com.autodesk.client.api.BucketsApi;
import com.autodesk.client.api.DerivativesApi;
import com.autodesk.client.api.ObjectsApi;
import com.autodesk.client.auth.Credentials;
import com.autodesk.client.auth.OAuth2TwoLegged;
import com.autodesk.client.model.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;
/**
* @program: wisdomSite
* @description: autodesk
* @author: Mr.Peng
* @create: 2020-09-23 14:26
**/
@Slf4j
public class ForgeUtil {
//private static final String CLIENT_ID = "zQRl0iGIm6v6JhYr92RgxcAf9TuXp7EW";
//private static final String CLIENT_SECRET = "0DfZvyRjURMDgpaP";
private static final String BUCKET_KEY = "forge-java-app-demo-";
//private static OAuth2TwoLegged oauth2TwoLegged;
// Initialize the relevant clients; in this example, the Objects, Buckets and Derivatives clients, which are part of the Data Management API and Model Derivatives API
private static final ObjectsApi objectsApi = new ObjectsApi();
private static final BucketsApi bucketsApi = new BucketsApi();
private static final DerivativesApi derivativesApi = new DerivativesApi();
//private static Credentials twoLeggedCredentials;
/**
* Initialize the 2-legged OAuth 2.0 client, and optionally set specific scopes.
* @throws Exception
*/
/*private static void initializeOAuth() throws Exception {
// You must provide at least one valid scope
List<String> scopes = new ArrayList<String>();
scopes.add("data:read");
scopes.add("data:write");
scopes.add("data:create");
scopes.add("data:search");
scopes.add("bucket:create");
scopes.add("bucket:read");
scopes.add("bucket:update");
scopes.add("bucket:delete");
//Set autoRefresh to `true` to automatically refresh the access token when it expires.
oauth2TwoLegged = new OAuth2TwoLegged(CLIENT_ID, CLIENT_SECRET, scopes, true);
twoLeggedCredentials = oauth2TwoLegged.authenticate();
}*/
/**
* Example of how to create a new bucket using Forge SDK.
* Uses the oauth2TwoLegged and twoLeggedCredentials objects that you retrieved previously.
*
* @throws com.autodesk.client.ApiException
* @throws Exception
*/
private static void createBucket(OAuth2TwoLegged oauth2TwoLegged, Credentials twoLeggedCredentials, String clientId) throws ApiException, Exception {
log.info("***** Sending createBucket request");
PostBucketsPayload payload = new PostBucketsPayload();
payload.setBucketKey(BUCKET_KEY + clientId.toLowerCase());
payload.setPolicyKey(PostBucketsPayload.PolicyKeyEnum.PERSISTENT);
ApiResponse<Bucket> response = bucketsApi.createBucket(payload, "US", oauth2TwoLegged, twoLeggedCredentials);
log.info("***** Response for createBucket: " + response.getData());
}
/**
* 获取BIM文件的组件
*
* @param urn
* @return
* @throws ApiException
* @throws Exception
*/
public static List<MetadataCollection> getMetadata(String urn, String clientId, String clientSecret) {
try {
List<String> scopes = new ArrayList<String>();
scopes.add("data:read");
scopes.add("data:write");
scopes.add("bucket:create");
scopes.add("bucket:read");
//Set autoRefresh to `true` to automatically refresh the access token when it expires.
OAuth2TwoLegged oauth2TwoLegged = new OAuth2TwoLegged(clientId, clientSecret, scopes, true);
Credentials twoLeggedCredentials = oauth2TwoLegged.authenticate();
log.info("***** Sending getMetadata request");
ApiResponse<Metadata> response = derivativesApi.getMetadata(urn, null, oauth2TwoLegged, twoLeggedCredentials);
ApiResponse<Metadata> aa = derivativesApi.getModelviewMetadata(urn, response.getData().getData().getMetadata().get(0).getGuid(), null, null, oauth2TwoLegged, twoLeggedCredentials);
ApiResponse<Metadata> data = derivativesApi.getModelviewProperties(urn, response.getData().getData().getMetadata().get(0).getGuid(), null, null, oauth2TwoLegged, twoLeggedCredentials);
//log.info("***** Response for getMetadata: " + );
return data.getData().getData().getCollection();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private static ObjectDetails uploadFile(File fileToUpload, String fileName, OAuth2TwoLegged oauth2TwoLegged, Credentials twoLeggedCredentials) throws FileNotFoundException, ApiException, Exception {
log.info("***** Sending uploadFile request");
//File fileToUpload = new File(FILE_PATH);
ApiResponse<ObjectDetails> response = objectsApi.uploadObject(BUCKET_KEY, fileName, (int) fileToUpload.length(), fileToUpload, null, null, oauth2TwoLegged, twoLeggedCredentials);
log.info("***** Response for uploadFile: ");
ObjectDetails objectDetails = response.getData();
log.info("Uploaded object Details - Location: " + objectDetails.getLocation() + ", Size:" + objectDetails.getSize());
return objectDetails;
}
/**
* Example of how to send a translate to SVF job request.
* Uses the oauth2TwoLegged and twoLeggedCredentials objects that you retrieved previously.
*
* @param urn - the urn of the file to translate
* @throws com.autodesk.client.ApiException
* @throws Exception
*/
private static Job translateToSVF(String urn, OAuth2TwoLegged oauth2TwoLegged, Credentials twoLeggedCredentials) throws ApiException, Exception {
log.info("***** Sending Derivative API translate request");
JobPayload job = new JobPayload();
byte[] urnBase64 = Base64.encodeBase64(urn.getBytes());
JobPayloadInput input = new JobPayloadInput();
input.setUrn(new String(urnBase64));
JobPayloadOutput output = new JobPayloadOutput();
JobPayloadItem formats = new JobPayloadItem();
formats.setType(JobPayloadItem.TypeEnum.SVF);
formats.setViews(Arrays.asList(JobPayloadItem.ViewsEnum._3D));
output.setFormats(Arrays.asList(formats));
job.setInput(input);
job.setOutput(output);
ApiResponse<Job> response = derivativesApi.translate(job, true, oauth2TwoLegged, twoLeggedCredentials);
log.info("***** Response for Translating File to SVF: " + response.getData());
return response.getData();
}
public static String getUrn(File file, String fileName, String clientId, String clientSecret) {
Map<String, Object> data = new HashMap<>();
String urn = "";
try {
List<String> scopes = new ArrayList<String>();
scopes.add("data:read");
scopes.add("data:write");
scopes.add("bucket:create");
scopes.add("bucket:read");
//Set autoRefresh to `true` to automatically refresh the access token when it expires.
OAuth2TwoLegged oauth2TwoLegged = new OAuth2TwoLegged(clientId, clientSecret, scopes, true);
Credentials twoLeggedCredentials = oauth2TwoLegged.authenticate();
try {
createBucket(oauth2TwoLegged, twoLeggedCredentials, clientId);
} catch (ApiException e) {
System.err.println("Error creating bucket : " + e.getResponseBody());
}
try {
ObjectDetails uploadedObject = uploadFile(file, fileName, oauth2TwoLegged, twoLeggedCredentials);
try {
Job job = translateToSVF(uploadedObject.getObjectId(), oauth2TwoLegged, twoLeggedCredentials);
if (job.getResult().equals("success")) {
//String base64Urn = job.getUrn();
urn = job.getUrn();
log.info("------------: " + urn);
}
} catch (ApiException e) {
System.err.println("Error translating file : " + e.getResponseBody());
}
} catch (ApiException e) {
System.err.println("Error uploading filessss : " + e.getCode());
}
} catch (ApiException e) {
System.err.println("Error Initializing OAuth client : " + e.getResponseBody());
} catch (Exception e) {
System.err.println("System Error ");
}
//data.put("urn",urn);
return urn;
}
public static String getToken(String clientId, String clientSecret) throws Exception {
List<String> scopes = new ArrayList<String>();
scopes.add("data:read");
scopes.add("data:write");
scopes.add("bucket:create");
scopes.add("bucket:read");
//Set autoRefresh to `true` to automatically refresh the access token when it expires.
OAuth2TwoLegged oauth2TwoLegged = new OAuth2TwoLegged(clientId, clientSecret, scopes, true);
Credentials twoLeggedCredentials = oauth2TwoLegged.authenticate();
return twoLeggedCredentials.getAccessToken();
}
public static void main(String[] args) {
log.info(JSONUtil.toJsonStr(getMetadata("dXJuOmFkc2sub2JqZWN0czpvcy5vYmplY3Q6Zm9yZ2UtamF2YS1hcHAtZGVtby16cXJsMGlnaW02djZqaHlyOTJyZ3hjYWY5dHV4cDdldy90ZXN0Mi5vYmo", "zQRl0iGIm6v6JhYr92RgxcAf9TuXp7EW", "0DfZvyRjURMDgpaP")));
}
}