當前位置: 首頁>>代碼示例>>Java>>正文


Java ObjectId類代碼示例

本文整理匯總了Java中org.pentaho.di.repository.ObjectId的典型用法代碼示例。如果您正苦於以下問題:Java ObjectId類的具體用法?Java ObjectId怎麽用?Java ObjectId使用的例子?那麽, 這裏精選的類代碼示例或許可以為您提供幫助。


ObjectId類屬於org.pentaho.di.repository包,在下文中一共展示了ObjectId類的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Java代碼示例。

示例1: readRep

import org.pentaho.di.repository.ObjectId; //導入依賴的package包/類
@Override public void readRep(Repository rep, IMetaStore metaStore, ObjectId id_step,
    List<DatabaseMeta> databases) throws KettleException {
    super.readRep(rep, metaStore, id_step, databases);

    String truncateStr = rep.getStepAttributeString(id_step, "truncate");
    if (truncateStr.equals("true")) {
        setTruncate(true);
    } else {
        setTruncate(false);
    }

    int nrStreamFields = rep.countNrStepAttributes(id_step, "stream_field_name");
    streamFields = new ArrayList<String>(nrStreamFields);
    for (int i = 0; i < nrStreamFields; i++) {
        streamFields.add(rep.getStepAttributeString(id_step, i, "stream_field_name"));
    }
}
 
開發者ID:aliyun,項目名稱:aliyun-maxcompute-data-collectors,代碼行數:18,代碼來源:OdpsOutputMeta.java

示例2: readRep

import org.pentaho.di.repository.ObjectId; //導入依賴的package包/類
@Override public void readRep(Repository rep, IMetaStore metaStore, ObjectId id_step,
    List<DatabaseMeta> databases) throws KettleException {
    setEndpoint(rep.getStepAttributeString(id_step, "endpoint"));
    setTunnelEndpoint(rep.getStepAttributeString(id_step, "tunnelEndpoint"));
    setAccessId(rep.getStepAttributeString(id_step, "accessId"));
    setAccessKey(rep.getStepAttributeString(id_step, "accessKey"));
    setProjectName(rep.getStepAttributeString(id_step, "projectName"));
    setTableName(rep.getStepAttributeString(id_step, "tableName"));
    setPartition(rep.getStepAttributeString(id_step, "partition"));

    int nrFields = rep.countNrStepAttributes(id_step, "field_name");
    odpsFields = new ArrayList<OdpsField>(nrFields);
    for (int i = 0; i < nrFields; i++) {
        OdpsField field = new OdpsField();
        field.setName(rep.getStepAttributeString(id_step, i, "field_name"));
        field.setType(rep.getStepAttributeString(id_step, i, "field_type"));
        field.setComment(rep.getStepAttributeString(id_step, i, "field_comment"));
        odpsFields.add(field);
    }
}
 
開發者ID:aliyun,項目名稱:aliyun-maxcompute-data-collectors,代碼行數:21,代碼來源:OdpsMeta.java

示例3: saveRep

import org.pentaho.di.repository.ObjectId; //導入依賴的package包/類
@Override public void saveRep(Repository rep, IMetaStore metaStore, ObjectId id_transformation,
    ObjectId id_step) throws KettleException {
    rep.saveStepAttribute(id_transformation, id_step, "endpoint", getEndpoint());
    rep.saveStepAttribute(id_transformation, id_step, "tunnelEndpoint", getTunnelEndpoint());
    rep.saveStepAttribute(id_transformation, id_step, "accessId", getAccessId());
    rep.saveStepAttribute(id_transformation, id_step, "accessKey", getAccessKey());
    rep.saveStepAttribute(id_transformation, id_step, "projectName", getProjectName());
    rep.saveStepAttribute(id_transformation, id_step, "tableName", getTableName());
    rep.saveStepAttribute(id_transformation, id_step, "partition", getPartition());

    for (int i = 0; i < odpsFields.size(); i++) {
        OdpsField field = odpsFields.get(i);
        rep.saveStepAttribute(id_transformation, id_step, i, "field_name",
            field.getName().toLowerCase());
        rep.saveStepAttribute(id_transformation, id_step, i, "field_type", field.getType());
        rep.saveStepAttribute(id_transformation, id_step, i, "field_comment",
            field.getComment());
    }
}
 
開發者ID:aliyun,項目名稱:aliyun-maxcompute-data-collectors,代碼行數:20,代碼來源:OdpsMeta.java

示例4: lookupTransObjectId

import org.pentaho.di.repository.ObjectId; //導入依賴的package包/類
/**
 * Try to look up the transObjectId for transformation which are referenced by path 
 * @param repository The repository to use.
 * @throws KettleException
 */
public void lookupTransObjectId( Repository repository ) throws KettleException {
  if ( repository == null )
    return;

  if ( Const.isEmpty( transFilename ) && transObjectId == null && !Const.isEmpty( transRepositoryPath ) ) {
    // see if there is a path specified to a repository name
    //
    String path = "/";
    String name = transRepositoryPath;
    int lastSlashIndex = name.lastIndexOf( '/' );
    if ( lastSlashIndex >= 0 ) {
      path = transRepositoryPath.substring( 0, lastSlashIndex + 1 );
      name = transRepositoryPath.substring( lastSlashIndex + 1 );
    }
    RepositoryDirectoryInterface tree = repository.loadRepositoryDirectoryTree();
    RepositoryDirectoryInterface rd = tree.findDirectory( path );
    if ( rd == null )
      rd = tree; // root

    ObjectId transformationID = repository.getTransformationID( name, rd );
    transObjectId = transformationID == null ? null : transformationID.getId();
  }
}
 
開發者ID:mattcasters,項目名稱:pentaho-pdi-streaming,代碼行數:29,代碼來源:StreamingService.java

示例5: saveRep

import org.pentaho.di.repository.ObjectId; //導入依賴的package包/類
/**
 * This method is called by Spoon when a step needs to serialize its configuration to a repository.
 * The repository implementation provides the necessary methods to save the step attributes.
 *
 * @param rep					the repository to save to
 * @param metaStore				the metaStore to optionally write to
 * @param id_transformation		the id to use for the transformation when saving
 * @param id_step				the id to use for the step  when saving
 */
public void saveRep(Repository rep, IMetaStore metaStore, ObjectId id_transformation, ObjectId id_step) throws KettleException
{
	try{
		rep.saveStepAttribute(id_transformation, id_step, "provider_id", provider == null ? "" : provider.getName() );
		rep.saveStepAttribute(id_transformation, id_step, "provider_desc", provider == null ? "" : provider.getDescription() );
		rep.saveStepAttribute( id_transformation, id_step, "flow_id", dataflow.getId() );
		rep.saveStepAttribute( id_transformation, id_step, "flow_desc", dataflow.getDescription() );
     rep.saveStepAttribute( id_transformation, id_step, "query_sdmx", getSdmxQuery() );

     saveDimensionsToRepository( rep, id_transformation, id_step );
     saveFieldsToRepository( rep, id_transformation, id_step );
	}
	catch(Exception e){
		throw new KettleException("Unable to save step into repository: "+id_step, e); 
	}
}
 
開發者ID:andtorg,項目名稱:sdmx-kettle,代碼行數:26,代碼來源:SdmxStepMeta.java

示例6: saveFieldsToRepository

import org.pentaho.di.repository.ObjectId; //導入依賴的package包/類
private void saveFieldsToRepository( Repository rep, ObjectId id_transformation, ObjectId id_step ) throws KettleException {
  for ( int i = 0; i < fields.length; i++ ) {
    SdmxInputField field = fields[i];

    rep.saveStepAttribute( id_transformation, id_step, i, "name", field.getName() );
    rep.saveStepAttribute( id_transformation, id_step, i, "type", field.getTypeDesc() );
    rep.saveStepAttribute( id_transformation, id_step, i, "length", field.getLength() );
    rep.saveStepAttribute( id_transformation, id_step, i, "precision", field.getPrecision() );
    rep.saveStepAttribute( id_transformation, id_step, i, "trim_type", field.getTrimTypeCode() );
    rep.saveStepAttribute( id_transformation, id_step, i, "repeat", field.isRepeated() );
    rep.saveStepAttribute( id_transformation, id_step, i, "format", field.getFormat() );
    rep.saveStepAttribute( id_transformation, id_step, i, "currency", field.getCurrencySymbol() );
    rep.saveStepAttribute( id_transformation, id_step, i, "decimal", field.getDecimalSymbol() );
    rep.saveStepAttribute( id_transformation, id_step, i, "group", field.getGroupSymbol() );
  }
}
 
開發者ID:andtorg,項目名稱:sdmx-kettle,代碼行數:17,代碼來源:SdmxStepMeta.java

示例7: readFieldsFromRepository

import org.pentaho.di.repository.ObjectId; //導入依賴的package包/類
private void readFieldsFromRepository( Repository rep, ObjectId id_step ) throws KettleException {
  int nrFields = rep.countNrStepAttributes( id_step, "trim_type" );
  allocateFields( nrFields );

  for ( int i = 0; i < nrFields; i++ ) {
    SdmxInputField field = new SdmxInputField();

    field.setName( rep.getStepAttributeString( id_step, i, "name" ) );
    field.setType( rep.getStepAttributeString( id_step, i, "type" ) );
    field.setLength( (int) rep.getStepAttributeInteger( id_step, i,  "length" ) );
    field.setPrecision( (int) rep.getStepAttributeInteger( id_step, i,  "precision" ) );
    field.setTrimType( ValueMetaBase.getTrimTypeByCode( rep.getStepAttributeString( id_step, i, "trim_type" ) ) );
    field.setFormat( rep.getStepAttributeString( id_step, i, "format" ) );
    field.setCurrencySymbol( rep.getStepAttributeString( id_step, i, "currency" ) );
    field.setDecimalSymbol( rep.getStepAttributeString( id_step, i, "decimal" ) );
    field.setGroupSymbol( rep.getStepAttributeString( id_step, i, "group" ) );

    String srepeat = rep.getStepAttributeString( id_step, i, "repeat" );
    if ( srepeat != null ) {
      field.setRepeated( YES.equalsIgnoreCase( srepeat ) );
    } else {
      field.setRepeated( false );
    }
    fields[i] = field;
  }
}
 
開發者ID:andtorg,項目名稱:sdmx-kettle,代碼行數:27,代碼來源:SdmxStepMeta.java

示例8: readRep

import org.pentaho.di.repository.ObjectId; //導入依賴的package包/類
@Override
public void readRep(Repository rep, IMetaStore metaStore, ObjectId id_step, List<DatabaseMeta> databases)
    throws KettleException {

  String connectionName = rep.getStepAttributeString(id_step, TAG_CONNECTION);
  if (StringUtils.isNotEmpty(connectionName)) {
    try {
      connection = HCPConnectionUtils.getConnectionFactory(metaStore).loadElement(connectionName);
    } catch (MetaStoreException e) {
      // We just log the message but we don't abort the complete meta-data
      // loading.
      //
      log.logError(BaseMessages.getString(PKG, "HCPGetMeta.Error.HCPConnectionNotFound", connectionName));
      connection = null;
    }
  }
  sourceFileField = rep.getStepAttributeString(id_step, TAG_SOURCE_FILE);
  targetFileField = rep.getStepAttributeString(id_step, TAG_TARGET_FILE);
  responseCodeField = rep.getStepAttributeString(id_step, TAG_RESPONSE_CODE_FIELD);
  responseTimeField = rep.getStepAttributeString(id_step, TAG_RESPONSE_TIME_FIELD);
  responseSizeField = rep.getStepAttributeString(id_step, TAG_RESPONSE_SIZE_FIELD);
}
 
開發者ID:mattcasters,項目名稱:pdi-hcp-plugin,代碼行數:23,代碼來源:HCPGetMeta.java

示例9: readRep

import org.pentaho.di.repository.ObjectId; //導入依賴的package包/類
@Override
public void readRep(Repository rep, IMetaStore metaStore, ObjectId id_step, List<DatabaseMeta> databases)
    throws KettleException {

  String connectionName = rep.getStepAttributeString(id_step, TAG_CONNECTION);
  if (StringUtils.isNotEmpty(connectionName)) {
    try {
      connection = HCPConnectionUtils.getConnectionFactory(metaStore).loadElement(connectionName);
    } catch(MetaStoreException e) {
      // We just log the message but we don't abort the complete meta-data loading.
      //
      log.logError(BaseMessages.getString(PKG, "HCPPutMeta.Error.HCPConnectionNotFound", connectionName));
      connection = null;
    }
  }
  targetFileField = rep.getStepAttributeString(id_step, TAG_TARGET_FILE_FIELD);
  responseCodeField = rep.getStepAttributeString(id_step, TAG_RESPONSE_CODE_FIELD);
  responseTimeField = rep.getStepAttributeString(id_step, TAG_RESPONSE_TIME_FIELD);
}
 
開發者ID:mattcasters,項目名稱:pdi-hcp-plugin,代碼行數:20,代碼來源:HCPDeleteMeta.java

示例10: readRep

import org.pentaho.di.repository.ObjectId; //導入依賴的package包/類
@Override
public void readRep(Repository rep, IMetaStore metaStore, ObjectId id_step, List<DatabaseMeta> databases)
    throws KettleException {

  String connectionName = rep.getStepAttributeString(id_step, TAG_CONNECTION);
  if (StringUtils.isNotEmpty(connectionName)) {
    try {
      connection = HCPConnectionUtils.getConnectionFactory(metaStore).loadElement(connectionName);
    } catch(MetaStoreException e) {
      // We just log the message but we don't abort the complete meta-data loading.
      //
      log.logError(BaseMessages.getString(PKG, "HCPPutMeta.Error.HCPConnectionNotFound", connectionName));
      connection = null;
    }
  }
  sourceFileField = rep.getStepAttributeString(id_step, TAG_SOURCE_FILE_FIELD);
  targetFileField = rep.getStepAttributeString(id_step, TAG_TARGET_FILE_FIELD);
  updating = rep.getStepAttributeBoolean(id_step, TAG_UPDATING);
  responseCodeField = rep.getStepAttributeString(id_step, TAG_RESPONSE_CODE_FIELD);
  responseTimeField = rep.getStepAttributeString(id_step, TAG_RESPONSE_TIME_FIELD);
}
 
開發者ID:mattcasters,項目名稱:pdi-hcp-plugin,代碼行數:22,代碼來源:HCPPutMeta.java

示例11: readRep

import org.pentaho.di.repository.ObjectId; //導入依賴的package包/類
/**
 * Read the steps information from a Kettle repository
 *
 * @param rep       The repository to read from
 * @param idStep    The step ID
 * @param databases The databases to reference
 * @param counters  The counters to reference
 * @throws KettleException When an unexpected error occurred (database, network, etc)
 */
@Override public void readRep(Repository rep, ObjectId idStep, List<DatabaseMeta> databases,
    Map<String, Counter> counters) throws KettleException {
  try {
    tabelName = rep.getStepAttributeString(idStep, "TableName");
    mdkeySize = rep.getStepAttributeString(idStep, "MDKeySize");
    measureCount = rep.getStepAttributeString(idStep, "Measurecount");
    heirAndKeySize = rep.getStepAttributeString(idStep, "HeirAndKeySize");
    databaseName = rep.getStepAttributeString(idStep, "databaseName");
    tableName = rep.getStepAttributeString(idStep, "tableName");
    groupByEnabled = rep.getStepAttributeString(idStep, "isGroupByEnabled");
    aggregatorClassString = rep.getStepAttributeString(idStep, "aggregatorClassString");
    aggregatorString = rep.getStepAttributeString(idStep, "aggregatorString");
    factDimLensString = rep.getStepAttributeString(idStep, "factDimLensString");
    levelAnddataTypeString = rep.getStepAttributeString(idStep, "levelAnddataTypeString");
    partitionID = rep.getStepAttributeString(idStep, "partitionID");
    segmentId = rep.getStepAttributeString(idStep, "segmentId");
    taskNo = rep.getStepAttributeString(idStep, "taskNo");
  } catch (Exception exception) {
    throw new KettleException(BaseMessages
        .getString(PKG, "CarbonDataWriterStepMeta.Exception.UnexpectedErrorInReadingStepInfo"),
        exception);
  }

}
 
開發者ID:carbondata,項目名稱:carbondata,代碼行數:34,代碼來源:CarbonSliceMergerStepMeta.java

示例12: readRep

import org.pentaho.di.repository.ObjectId; //導入依賴的package包/類
/**
 * Read the steps information from a Kettle repository
 *
 * @param rep       The repository to read from
 * @param idStep    The step ID
 * @param databases The databases to reference
 * @param counters  The counters to reference
 * @throws KettleException When an unexpected error occurred (database, network, etc)
 */
public void readRep(Repository rep, ObjectId idStep, List<DatabaseMeta> databases,
    Map<String, Counter> counters) throws KettleException {
  try {
    this.tabelName = rep.getStepAttributeString(idStep, "TableName");
    this.outputRowSize = rep.getStepAttributeString(idStep, "outputRowSize");
    this.databaseName = rep.getStepAttributeString(idStep, "databaseName");
    this.tableName = rep.getStepAttributeString(idStep, "tableName");
    this.dimensionCount = rep.getStepAttributeString(idStep, "dimensionCount");
    this.noDictionaryDims = rep.getStepAttributeString(idStep, "noDictionaryDims");
    this.noDictionaryDims = rep.getStepAttributeString(idStep, "noDictionaryDimsMapping");
    this.complexDimensionCount = rep.getStepAttributeString(idStep, "complexDimensionCount");
    this.measureCount = rep.getStepAttributeString(idStep, "measureCount");
    this.updateMemberRequest = rep.getStepAttributeString(idStep, "isUpdateMemberRequest");
    this.measureDataType = rep.getStepAttributeString(idStep, "measureDataType");
    this.partitionID = rep.getStepAttributeString(idStep, "partitionID");
    this.segmentId = rep.getStepAttributeString(idStep, "segmentId");
    this.taskNo = rep.getStepAttributeString(idStep, "taskNo");
  } catch (Exception ex) {
    throw new KettleException(BaseMessages
        .getString(PKG, "CarbonDataWriterStepMeta.Exception.UnexpectedErrorInReadingStepInfo",
            new String[0]), ex);
  }
}
 
開發者ID:carbondata,項目名稱:carbondata,代碼行數:33,代碼來源:SortKeyStepMeta.java

示例13: readRep

import org.pentaho.di.repository.ObjectId; //導入依賴的package包/類
@Override public void readRep(Repository rep, ObjectId idStep, List<DatabaseMeta> databases,
    Map<String, Counter> counters) throws KettleException {
  try {
    tableName = rep.getStepAttributeString(idStep, "TableName");
    aggregateLevels = rep.getStepAttributeString(idStep, "AggregateLevels");
    numberOfCores = rep.getStepAttributeString(idStep, "NumberOfCores");
    databaseName = rep.getStepAttributeString(idStep, "databaseName");
    tableName = rep.getStepAttributeString(idStep, "tableName");
    noDictionaryDims = rep.getStepAttributeString(idStep, "noDictionaryDims");
    measureCount = rep.getStepAttributeString(idStep, "measureCount");
    columnGroupsString = rep.getStepAttributeString(idStep, "dimensionsStoreType");
    dimensionCount = rep.getStepAttributeString(idStep, "dimensionCount");
    complexDimsCount = rep.getStepAttributeString(idStep, "complexDimsCount");
    complexTypeString = rep.getStepAttributeString(idStep, "complexTypeString");
    measureDataType = rep.getStepAttributeString(idStep, "measureDataType");
    taskNo = rep.getStepAttributeString(idStep, "taskNo");
    factTimeStamp = rep.getStepAttributeString(idStep, "factTimeStamp");
    partitionID = rep.getStepAttributeString(idStep, "partitionID");
    isUseInvertedIndex = rep.getStepAttributeString(idStep, "isUseInvertedIndex");
    segmentId = rep.getStepAttributeString(idStep, "segmentId");
    noDictionaryDimsMapping = rep.getStepAttributeString(idStep, "noDictionaryDimsMapping");
  } catch (Exception e) {
    throw new KettleException(BaseMessages
        .getString(pkg, "CarbonMDKeyStepMeta.Exception.UnexpectedErrorInReadingStepInfo"), e);
  }
}
 
開發者ID:carbondata,項目名稱:carbondata,代碼行數:27,代碼來源:MDKeyGenStepMeta.java

示例14: readRep

import org.pentaho.di.repository.ObjectId; //導入依賴的package包/類
@Override public void readRep( Repository rep, IMetaStore metaStore, ObjectId stepId, List<DatabaseMeta> databases )
    throws KettleException {
  try {
    broker = rep.getStepAttributeString( stepId, "BROKER" );
    topic = rep.getStepAttributeString( stepId, "TOPIC" );
    m_topicIsFromField = rep.getStepAttributeBoolean( stepId, "TOPIC_IS_FROM_FIELD" );
    field = rep.getStepAttributeString( stepId, "FIELD" );
    clientId = rep.getStepAttributeString( stepId, "CLIENT_ID" );
    timeout = rep.getStepAttributeString( stepId, "TIMEOUT" );
    qos = rep.getStepAttributeString( stepId, "QOS" );
    requiresAuth = Boolean.parseBoolean( rep.getStepAttributeString( stepId, "REQUIRES_AUTH" ) );
    username = rep.getStepAttributeString( stepId, "USERNAME" );
    password = rep.getStepAttributeString( stepId, "PASSWORD" );

    sslCaFile = rep.getStepAttributeString( stepId, "SSL_CA_FILE" );
    sslCertFile = rep.getStepAttributeString( stepId, "SSL_CERT_FILE" );
    sslKeyFile = rep.getStepAttributeString( stepId, "SSL_KEY_FILE" );
    sslKeyFilePass = rep.getStepAttributeString( stepId, "SSL_KEY_FILE_PASS" );
  } catch ( Exception e ) {
    throw new KettleException( "MQTTClientMeta.Exception.loadRep", e );
  }
}
 
開發者ID:pentaho-labs,項目名稱:pentaho-mqtt-plugin,代碼行數:23,代碼來源:MQTTPublisherMeta.java

示例15: loadRep

import org.pentaho.di.repository.ObjectId; //導入依賴的package包/類
public void loadRep( Repository rep, IMetaStore metaStore, ObjectId id_jobentry, List<DatabaseMeta> databases,
                     List<SlaveServer> slaveServers ) throws KettleException {
  try {
    setManagementAction( rep.getJobEntryAttributeString( id_jobentry, MANAGEMENT_ACTION ) );
    setReplace( rep.getJobEntryAttributeBoolean( id_jobentry, REPLACE ) );
    setFailIfExists( rep.getJobEntryAttributeBoolean( id_jobentry, FAIL_IF_EXISTS ) );
    setWarehouseName( rep.getJobEntryAttributeString( id_jobentry, WAREHOUSE_NAME ) );
    setWarehouseSize( rep.getJobEntryAttributeString( id_jobentry, WAREHOUSE_SIZE ) );
    setWarehouseType( rep.getJobEntryAttributeString( id_jobentry, WAREHOUSE_TYPE ) );
    setMaxClusterCount( rep.getJobEntryAttributeString( id_jobentry, MAX_CLUSTER_COUNT ) );
    setMinClusterCount( rep.getJobEntryAttributeString( id_jobentry, MIN_CLUSTER_COUNT ) );
    setAutoSuspend( rep.getJobEntryAttributeString( id_jobentry, AUTO_SUSPEND ) );
    setAutoResume( rep.getJobEntryAttributeBoolean( id_jobentry, AUTO_RESUME ) );
    setInitiallySuspended( rep.getJobEntryAttributeBoolean( id_jobentry, INITIALLY_SUSPENDED ) );
    setResourceMonitor( rep.getJobEntryAttributeString( id_jobentry, RESOURCE_MONITOR ) );
    setComment( rep.getJobEntryAttributeString( id_jobentry, COMMENT ) );
    databaseMeta = rep.loadDatabaseMetaFromJobEntryAttribute( id_jobentry, CONNECTION, "id_database", databases );
    setFailIfNotExists( rep.getJobEntryAttributeBoolean( id_jobentry, FAIL_IF_NOT_EXISTS ) );
  } catch ( KettleException dbe ) {

    throw new KettleException( BaseMessages.getString( PKG, "SnowflakeWarehouseManager.Error.Exception.UnableLoadRep" )
      + id_jobentry, dbe );
  }
}
 
開發者ID:inquidia,項目名稱:PentahoSnowflakePlugin,代碼行數:25,代碼來源:WarehouseManager.java


注:本文中的org.pentaho.di.repository.ObjectId類示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。