2024-04-14 21:05:01 +08:00

217 lines
9.5 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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) {
log.error("error", e);
}
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")));
}
}