Java Code Examples for org.apache.commons.lang3.tuple.Pair#of()

The following examples show how to use org.apache.commons.lang3.tuple.Pair#of() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: Checker.java    From dremio-oss with Apache License 2.0 6 votes vote down vote up
public static Checker getChecker(int min, int max) {
  final Pair<Integer, Integer> range = Pair.of(min, max);
  if(checkerMap.containsKey(range)) {
    return checkerMap.get(range);
  }

  final Checker newChecker;
  if(min == max) {
    newChecker = new Checker(min);
  } else {
    newChecker = new Checker(min, max);
  }

  checkerMap.put(range, newChecker);
  return newChecker;
}
 
Example 2
Source File: TestRemoteDownloadSource.java    From datacollector with Apache License 2.0 6 votes vote down vote up
private Pair<String, List<Record>> runSourceAndReturnOffsetAndRecords(
    String lastOffset,
    int batchSize
) throws Exception {
  RemoteDownloadSource origin = new TestRemoteDownloadSourceBuilder(scheme, port)
      .withDataFormat(DataFormat.TEXT)
      .withFilePattern("*.zip")
      .withDataFormatCompression(Compression.ARCHIVE)
      .withFilePatternInArchive("testReadArchive/*.txt")
      .build();
  SourceRunner runner = new SourceRunner.Builder(RemoteDownloadDSource.class, origin)
      .addOutputLane("lane")
      .build();
  runner.runInit();
  try {
    StageRunner.Output op = runner.runProduce(lastOffset, batchSize);
    List<Record> records = op.getRecords().get("lane");
    return Pair.of(op.getNewOffset(), records);
  } finally {
    destroyAndValidate(runner);
  }
}
 
Example 3
Source File: PruneScanRule.java    From Bats with Apache License 2.0 6 votes vote down vote up
/** Compose the array of partition values for the directories that are referenced by filter:
 *  e.g suppose the dir hierarchy is year/quarter/month and the query is:
 *     SELECT * FROM T WHERE dir0=2015 AND dir1 = 'Q1',
 * then for 2015/Q1/Feb, this will have ['2015', 'Q1', null]
 * If the query filter condition is WHERE dir1 = 'Q2'  (i.e no dir0 condition) then the array will
 * have [null, 'Q2', null]
 */
private Pair<String[], Integer> composePartition(BitSet referencedDirsBitSet,
    Map<Integer, Integer> partitionMap,
    ValueVector[] vectors,
    int recordCount) {
  String[] partition = new String[vectors.length];
  int maxIndex = -1;
  for (int referencedDirsIndex : BitSets.toIter(referencedDirsBitSet)) {
    int partitionColumnIndex = partitionMap.get(referencedDirsIndex);
    ValueVector vv = vectors[partitionColumnIndex];
    if (vv.getAccessor().getValueCount() > 0 &&
        vv.getAccessor().getObject(recordCount) != null) {
      String value = vv.getAccessor().getObject(recordCount).toString();
      partition[partitionColumnIndex] = value;
      maxIndex = Math.max(maxIndex, partitionColumnIndex);
    }
  }
  return Pair.of(partition, maxIndex);
}
 
Example 4
Source File: GallicSemiring.java    From jopenfst with MIT License 6 votes vote down vote up
/**
 * Factorize a gallic weight into the (head x weight, rest x One); the contract of factorize is that:
 * val (factor1, factor2) = factorize(weight) implies weight = times(factor1, factor2)
 * (see openfst's GallicFactor)
 * @param weight gallic weight to factorize
 * @return
 */
public Pair<GallicWeight, GallicWeight> factorize(GallicWeight weight) {
  Preconditions.checkArgument(isNotZero(weight), "cannot factorize a zero weight");
  IntArrayList labels = weight.getLabels();
  if (labels.isEmpty()) {
    return Pair.of(GallicWeight.createEmptyLabels(weight.getWeight()), one());
  }
  if (labels.size() == 1) {
    return Pair.of(GallicWeight.createSingleLabel(labels.get(0), weight.getWeight()), one());
  }
  IntArrayList prefix = new IntArrayList(1);
  IntArrayList suffix = new IntArrayList(labels.size() - 1);
  prefix.add(labels.get(0));
  for (int i = 1; i < labels.size(); i++) {
    suffix.add(labels.get(i));
  }
  return Pair.of(GallicWeight.create(prefix, weight.getWeight()), GallicWeight.create(suffix, weightSemiring.one()));
}
 
Example 5
Source File: OnePojoInfoHelper.java    From codehelper.generator with Apache License 2.0 6 votes vote down vote up
public static Pair<List<ChangeInfo>, List<ChangeInfo>> statisticChange(List<OnePojoInfo> onePojoInfos){
    List<ChangeInfo> newFiles = Lists.newArrayList();
    List<ChangeInfo> updatedFiles = Lists.newArrayList();
    for (OnePojoInfo onePojoInfo : onePojoInfos) {
        for (GeneratedFile file : onePojoInfo.getFiles()) {
            if(file.getOriginLines().isEmpty()){
                ChangeInfo newFile = new ChangeInfo();
                newFile.setFileName(file.getFile().getName());
                newFile.setAffectRow(file.getNewLines().size());
                newFile.setChangeType("new file");
                newFiles.add(newFile);
            }else{
                ChangeInfo updatedFile = new ChangeInfo();
                updatedFile.setFileName(file.getFile().getName());
                updatedFile.setAffectRow(countChangeRows(file.getNewLines(), file.getOriginLines()));
                updatedFile.setChangeType("updated");
                updatedFiles.add(updatedFile);
            }
        }
    }
    return Pair.of(newFiles, updatedFiles);
    
}
 
Example 6
Source File: GeomUtils.java    From TranskribusCore with GNU General Public License v3.0 6 votes vote down vote up
/**
	 * Returns the distance and the closest segment of a point (x,y) to a polygon given as a series of points
	 * @param isClosedShape True if this is a closes polygon or false if its a polyline
	 */
	public static Pair<Double, java.awt.geom.Line2D.Double> 
		getDistToPolygonAndClosestSegment(List<Point> pts, double x, double y, boolean isClosedShape) {
		double minDist = Integer.MAX_VALUE;
		java.awt.geom.Line2D.Double minLine = new java.awt.geom.Line2D.Double(0, 0, 0, 0);
		
		int N = isClosedShape ? pts.size() : pts.size()-1;
		
		for (int i=0; i<N; ++i) {
			java.awt.geom.Line2D.Double line = new java.awt.geom.Line2D.Double(pts.get(i), pts.get( (i+1) % pts.size() ));
			double d = line.ptSegDistSq(x, y);
//			logger.debug("d = "+d);
			if (d < minDist) {
				minDist = d;
				minLine = line;
			}
		}

		return Pair.of(minDist, minLine);
	}
 
Example 7
Source File: LumentumNetconfRoadmFlowRuleProgrammable.java    From onos with Apache License 2.0 5 votes vote down vote up
/**
 * Converts cross connect flow rule to module and connection.
 *
 * Connection number is incremental within the class and associated to the rule hash.
 *
 * @param xc the cross connect flow rule
 * @return pair of module (1 for MUX/ADD, 2 for DEMUX/DROP) and connection number
 */
private Pair<Short, Short> setModuleConnection(LumentumFlowRule xc, Integer id) {
    if (xc.isAddRule()) {
        xc.setConnectionModule((short) 1);
        xc.setConnectionId(id.shortValue());
        return Pair.of((short) 1, id.shortValue());
    } else {
        xc.setConnectionModule((short) 2);
        xc.setConnectionId(id.shortValue());
        return Pair.of((short) 2, id.shortValue());
    }
}
 
Example 8
Source File: MoodlightDao.java    From Kepler with GNU Lesser General Public License v3.0 5 votes vote down vote up
public static Pair<Integer, ArrayList<String>> getPresets(int itemId) {
    Pair<Integer, ArrayList<String>> presetData = null;

    Connection sqlConnection = null;
    PreparedStatement preparedStatement = null;
    ResultSet resultSet = null;

    try {
        sqlConnection = Storage.getStorage().getConnection();
        preparedStatement = Storage.getStorage().prepare("SELECT * FROM items_moodlight_presets WHERE item_id = ? LIMIT 1", sqlConnection);
        preparedStatement.setInt(1, itemId);
        resultSet = preparedStatement.executeQuery();

        if (resultSet.next()) {
            ArrayList<String> presets = new ArrayList<>();
            presets.add(resultSet.getString("preset_1"));
            presets.add(resultSet.getString("preset_2"));
            presets.add(resultSet.getString("preset_3"));

            presetData = Pair.of(resultSet.getInt("current_preset"), presets);
        }

    } catch (Exception e) {
        Storage.logError(e);
    } finally {
        Storage.closeSilently(preparedStatement);
        Storage.closeSilently(sqlConnection);
    }

    return presetData;
}
 
Example 9
Source File: TestZKSessionLock.java    From distributedlog with Apache License 2.0 5 votes vote down vote up
@Test(timeout = 60000)
public void testParseClientID() throws Exception {
    ZooKeeper zk = zkc.get();

    String lockPath = "/test-parse-clientid";
    String clientId = "test-parse-clientid-" + System.currentTimeMillis();
    Pair<String, Long> lockId = Pair.of(clientId, zk.getSessionId());

    createLockPath(zk, lockPath);

    // Correct data
    String node1 = getLockIdFromPath(createLockNodeV1(zk, lockPath, clientId));
    String node2 = getLockIdFromPath(createLockNodeV2(zk, lockPath, clientId));
    String node3 = getLockIdFromPath(createLockNodeV3(zk, lockPath, clientId));

    assertEquals(lockId, Utils.ioResult(asyncParseClientID(zk, lockPath, node1)));
    assertEquals(lockId, Utils.ioResult(asyncParseClientID(zk, lockPath, node2)));
    assertEquals(lockId, Utils.ioResult(asyncParseClientID(zk, lockPath, node3)));

    // Bad Lock Node Name
    String node4 = getLockIdFromPath(createLockNodeWithBadNodeName(zk, lockPath, clientId, "member"));
    String node5 = getLockIdFromPath(createLockNodeWithBadNodeName(zk, lockPath, clientId, "member_badnode"));
    String node6 = getLockIdFromPath(
            createLockNodeWithBadNodeName(zk, lockPath, clientId, "member_badnode_badnode"));
    String node7 = getLockIdFromPath(
            createLockNodeWithBadNodeName(zk, lockPath, clientId, "member_badnode_badnode_badnode"));
    String node8 = getLockIdFromPath(
            createLockNodeWithBadNodeName(zk, lockPath, clientId, "member_badnode_badnode_badnode_badnode"));

    assertEquals(lockId, Utils.ioResult(asyncParseClientID(zk, lockPath, node4)));
    assertEquals(lockId, Utils.ioResult(asyncParseClientID(zk, lockPath, node5)));
    assertEquals(lockId, Utils.ioResult(asyncParseClientID(zk, lockPath, node6)));
    assertEquals(lockId, Utils.ioResult(asyncParseClientID(zk, lockPath, node7)));
    assertEquals(lockId, Utils.ioResult(asyncParseClientID(zk, lockPath, node8)));

    // Malformed Node Name
    String node9 = getLockIdFromPath(
            createLockNodeWithBadNodeName(zk, lockPath, clientId, "member_malformed_s12345678_999999"));
    assertEquals(Pair.of("malformed", 12345678L), Utils.ioResult(asyncParseClientID(zk, lockPath, node9)));
}
 
Example 10
Source File: KeyVaultCredentials.java    From azure-keyvault-java with MIT License 5 votes vote down vote up
/**
 * Builds request with authenticated header. Protects request body if supported.
 *
 * @param originalRequest
 *            unprotected request without auth token.
 * @param challengeMap
 *            the challenge map.
 * @return Pair of protected request and HttpMessageSecurity used for
 *         encryption.
 */
private Pair<Request, HttpMessageSecurity> buildAuthenticatedRequest(Request originalRequest,
        Map<String, String> challengeMap) throws IOException {

    Boolean supportsPop = supportsMessageProtection(originalRequest.url().toString(), challengeMap);

    // if the service supports pop and a clientEncryptionKey has not been generated yet, generate
    // the key that will be used for encryption on this and all subsequent protected requests
    if (supportsPop && this.clientEncryptionKey == null)
    {
        try {
            final KeyPairGenerator generator = KeyPairGenerator.getInstance(CLIENT_ENCRYPTION_KEY_TYPE);

            generator.initialize(CLIENT_ENCRYPTION_KEY_SIZE);
            
            this.clientEncryptionKey = JsonWebKey.fromRSA(generator.generateKeyPair()).withKid(UUID.randomUUID().toString());   
            
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        }
    }

    AuthenticationResult authResult = getAuthenticationCredentials(supportsPop, challengeMap);

    if (authResult == null) {
        return null;
    }

    HttpMessageSecurity httpMessageSecurity = new HttpMessageSecurity(authResult.getAuthToken(),
            supportsPop ? authResult.getPopKey() : "",
            supportsPop ? challengeMap.get("x-ms-message-encryption-key") : "",
            supportsPop ? challengeMap.get("x-ms-message-signing-key") : "",
            this.clientEncryptionKey);

    Request request = httpMessageSecurity.protectRequest(originalRequest);
    return Pair.of(request, httpMessageSecurity);
}
 
Example 11
Source File: KafkaAvroEventKeyValueReporterTest.java    From incubator-gobblin with Apache License 2.0 5 votes vote down vote up
private Pair<String, GobblinTrackingEvent> nextKVEvent(Iterator<Pair<String, byte[]>> it, boolean isSchemaIdEnabled) throws IOException {
  Assert.assertTrue(it.hasNext());
  Pair<String, byte[]> event = it.next();
  return isSchemaIdEnabled ? Pair.of(event.getKey(), EventUtils
      .deserializeEventFromAvroSerialization(new GobblinTrackingEvent(), event.getValue(), schemaId)) : Pair.of(event.getKey(),
      EventUtils.deserializeEventFromAvroSerialization(new GobblinTrackingEvent(), event.getValue()));
}
 
Example 12
Source File: MappingArgument.java    From james-project with Apache License 2.0 5 votes vote down vote up
private static Pair<String, String> parseKeyValue(String keyValue) {
    List<String> pair = Splitter.on(';')
        .trimResults()
        .splitToList(keyValue);

    if (pair.size() != 2) {
        throw new IllegalArgumentException(CONFIGURATION_ERROR_MESSAGE);
    }

    return Pair.of(pair.get(0), pair.get(1));
}
 
Example 13
Source File: SslHelper.java    From dremio-flight-connector with Apache License 2.0 5 votes vote down vote up
static Pair<InputStream, InputStream> ssl(DremioConfig config, String hostName) throws Exception {
  final SSLConfigurator configurator = new SSLConfigurator(config, DremioConfig.WEB_SSL_PREFIX, "web");
  final Optional<SSLConfig> sslConfigOption = configurator.getSSLConfig(true, hostName);
  Preconditions.checkState(sslConfigOption.isPresent()); // caller's responsibility
  final SSLConfig sslConfig = sslConfigOption.get();

  final KeyStore keyStore = KeyStore.getInstance(sslConfig.getKeyStoreType());
  try (InputStream stream = Files.newInputStream(Paths.get(sslConfig.getKeyStorePath()))) {
    keyStore.load(stream, sslConfig.getKeyStorePassword().toCharArray());
  }

  boolean isAliasWithPrivateKey = false;
  Enumeration<String> es = keyStore.aliases();
  String alias = "";
  while (es.hasMoreElements()) {
    alias = (String) es.nextElement();
    // if alias refers to a private key break at that point
    // as we want to use that certificate
    if (isAliasWithPrivateKey = keyStore.isKeyEntry(alias)) {
      break;
    }
  }

  if (isAliasWithPrivateKey) {

    KeyStore.PrivateKeyEntry pkEntry = (KeyStore.PrivateKeyEntry) keyStore.getEntry(alias,
      new KeyStore.PasswordProtection(sslConfig.getKeyPassword().toCharArray()));

    PrivateKey myPrivateKey = pkEntry.getPrivateKey();


    // Load certificate chain
    Certificate[] chain = keyStore.getCertificateChain(alias);
    return Pair.of(keyToStream(myPrivateKey), certsToStream(chain));
  }

  return null;
}
 
Example 14
Source File: SpawnReporter.java    From fabric-carpet with MIT License 4 votes vote down vote up
public static List<BaseText> tracking_report(World worldIn)
{

    List<BaseText> report = new ArrayList<>();
    if (track_spawns == 0L)
    {
        report.add(Messenger.c(
                "w Spawn tracking disabled, type '",
                "wi /spawn tracking start","/spawn tracking start",
                "w ' to enable"));
        return report;
    }
    long duration = (long) worldIn.getServer().getTicks() - track_spawns;
    report.add(Messenger.c("bw --------------------"));
    String simulated = mock_spawns?"[SIMULATED] ":"";
    String location = (lower_spawning_limit != null)?String.format("[in (%d, %d, %d)x(%d, %d, %d)]",
            lower_spawning_limit.getX(),lower_spawning_limit.getY(),lower_spawning_limit.getZ(),
            upper_spawning_limit.getX(),upper_spawning_limit.getY(),upper_spawning_limit.getZ() ):"";
    report.add(Messenger.s(String.format("%sSpawn statistics %s: for %.1f min", simulated, location, (duration/72000.0)*60)));
    for (EntityCategory enumcreaturetype : EntityCategory.values())
    {
        //String type_code = String.format("%s", enumcreaturetype);
        boolean there_are_mobs_to_list = false;
        for (DimensionType dim: DimensionType.getAll()) //String world_code: new String[] {"", " (N)", " (E)"})
        {
            Pair<DimensionType, EntityCategory> code = Pair.of(dim, enumcreaturetype);
            if (spawn_ticks_spawns.get(code) > 0L)
            {
                there_are_mobs_to_list = true;
                double hours = overall_spawn_ticks.get(code)/72000.0;
                report.add(Messenger.s(String.format(" > %s (%.1f min), %.1f m/t, {%.1f%%F / %.1f%%- / %.1f%%+}; %.2f s/att",
                    code.getRight()+((code.getLeft()==DimensionType.OVERWORLD)?"":( (code.getLeft()==DimensionType.THE_NETHER)?"(N)":"(E)" )),
                    60*hours,
                    (1.0D*spawn_cap_count.get(code))/ spawn_attempts.get(code),
                    (100.0D*spawn_ticks_full.get(code))/ spawn_attempts.get(code),
                    (100.0D*spawn_ticks_fail.get(code))/ spawn_attempts.get(code),
                    (100.0D*spawn_ticks_succ.get(code))/ spawn_attempts.get(code),
                    (1.0D*spawn_ticks_spawns.get(code))/(spawn_ticks_fail.get(code)+spawn_ticks_succ.get(code))
                )));
                for (EntityType type: spawn_stats.get(code).keySet())
                {
                    report.add(Messenger.s(String.format("   - %s: %d spawns, %d per hour",
                            type.getName().getString(),
                            spawn_stats.get(code).getLong(type),
                            (72000 * spawn_stats.get(code).getLong(type)/duration ))));
                }
            }
        }
    }
    return report;
}
 
Example 15
Source File: CustomHandlerFactory.java    From quaerite with Apache License 2.0 4 votes vote down vote up
@Override
public Pair<CustomHandler, CustomHandler> crossover(CustomHandler parentA, CustomHandler parentB) {
    return Pair.of(parentA.deepCopy(), parentB.deepCopy());
}
 
Example 16
Source File: BankOrderMergeServiceImpl.java    From axelor-open-suite with GNU Affero General Public License v3.0 4 votes vote down vote up
protected Pair<String, LocalDate> getLastReferences(BankOrderLine bankOrderLine) {

    String lastReferenceId = "";
    LocalDate lastReferenceDate = null;

    for (BankOrderLineOrigin bankOrderLineOrigin : bankOrderLine.getBankOrderLineOriginList()) {
      LocalDate originDate = null;
      String originReferenceId = null;

      switch (bankOrderLineOrigin.getRelatedToSelect()) {
        case BankOrderLineOriginRepository.RELATED_TO_INVOICE:
          Invoice invoice = invoiceRepository.find(bankOrderLineOrigin.getRelatedToSelectId());
          if (!Strings.isNullOrEmpty(invoice.getSupplierInvoiceNb())) {
            originReferenceId = invoice.getSupplierInvoiceNb();
          } else {
            originReferenceId = invoice.getInvoiceId();
          }
          if (!Strings.isNullOrEmpty(invoice.getSupplierInvoiceNb())) {
            originDate = invoice.getOriginDate();
          } else {
            originDate = invoice.getInvoiceDate();
          }
          break;

        case BankOrderLineOriginRepository.RELATED_TO_PAYMENT_SCHEDULE_LINE:
          PaymentScheduleLine paymentScheduleLine =
              paymentScheduleLineRepository.find(bankOrderLineOrigin.getRelatedToSelectId());
          originReferenceId = paymentScheduleLine.getName();
          originDate = paymentScheduleLine.getScheduleDate();
          break;

        default:
          break;
      }

      if (originDate != null
          && (lastReferenceDate == null || lastReferenceDate.isBefore(originDate))) {
        lastReferenceDate = originDate;
        lastReferenceId = originReferenceId;
      }
    }

    return Pair.of(lastReferenceId, lastReferenceDate);
  }
 
Example 17
Source File: SteamBoiler.java    From GregTech with GNU Lesser General Public License v3.0 4 votes vote down vote up
@SideOnly(Side.CLIENT)
@Override
public Pair<TextureAtlasSprite, Integer> getParticleTexture() {
    return Pair.of(getBaseRenderer().getParticleSprite(), getPaintingColor());
}
 
Example 18
Source File: EqualsBuilder.java    From astor with GNU General Public License v2.0 3 votes vote down vote up
/**
 * <p>
 * Returns <code>true</code> if the registry contains the given object pair.
 * Used by the reflection methods to avoid infinite loops.
 * Objects might be swapped therefore a check is needed if the object pair
 * is registered in given or swapped order.
 * </p>
 *
 * @param lhs <code>this</code> object to lookup in registry
 * @param rhs the other object to lookup on registry
 * @return boolean <code>true</code> if the registry contains the given object.
 * @since 3.0
 */
static boolean isRegistered(Object lhs, Object rhs) {
    Set<Pair<IDKey, IDKey>> registry = getRegistry();
    Pair<IDKey, IDKey> pair = getRegisterPair(lhs, rhs);
    Pair<IDKey, IDKey> swappedPair = Pair.of(pair.getLeft(), pair.getRight());

    return registry != null
            && (registry.contains(pair) || registry.contains(swappedPair));
}
 
Example 19
Source File: BitpointContext.java    From cryptotrader with GNU Affero General Public License v3.0 2 votes vote down vote up
@VisibleForTesting
Future<String> requestAsync(String path, String body) {

    String apiKey = getStringProperty("api.id", null);
    String secret = getStringProperty("api.secret", null);

    if (StringUtils.isEmpty(apiKey) || StringUtils.isEmpty(secret)) {
        return null;
    }

    CompletableFuture<String> future = new CompletableFuture<>();

    try {

        lock.lock();

        Pair<Instant, String> accessToken = token.get();

        Long millis = getLongProperty("api.expire", TimeUnit.MINUTES.toMillis(59));

        Instant now = getNow();

        if (accessToken == null || accessToken.getLeft().isBefore(now.minusMillis(millis))) {

            Map<String, String> parameters = new LinkedHashMap<>();
            parameters.put("username", apiKey);
            parameters.put("password", secret);

            String json = request(URL_CLASSIC + "/login" + buildQueryParameter(parameters, "?"));

            accessToken = Pair.of(now, MapUtils.getString(gson.fromJson(json, TYPE_TOKEN), ACCESS_TOKEN));

            token.set(accessToken);

        }

        // Requests must be serial (Error Code : E_BL_0023)

        Map<String, String> headers = singletonMap("Content-Type", "application/json");

        String query = buildQueryParameter(singletonMap(ACCESS_TOKEN, accessToken.getRight()), "?");

        future.complete(request(POST, URL_CLASSIC + path + query, headers, body));

    } catch (Exception e) {

        token.set(null); // TODO: Clear token only on authentication failure.

        future.completeExceptionally(e);

    } finally {

        lock.unlock();

    }

    return future;

}
 
Example 20
Source File: FieldJsonMapper.java    From logsniffer with GNU Lesser General Public License v3.0 2 votes vote down vote up
/**
 * Resolves the type name and serialize as class from current field value,
 * the first used later for correct deserialization. The serialize as class
 * can be null, which indicates that serialization should follow without
 * type indication.
 * 
 * @param fieldValue
 *            field value
 * @return simple type, in worst case {@link FieldBaseTypes#OBJECT} is
 *         always returned as fallback
 */
public <T> Pair<String, Class<Object>> resolveSerializationType(final T fieldValue) {
	final FieldBaseTypes type = FieldBaseTypes.resolveType(fieldValue);
	return Pair.of(type.name(), type.getSerializationType());
}