/**
*
* Copyright (c) 2006-2017, Speedment, Inc. All Rights Reserved.
*
* 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.
*/
package com.speedment.tool.config.trait;
import com.speedment.runtime.config.Column;
import com.speedment.runtime.config.trait.HasTypeMapper;
import static com.speedment.runtime.config.trait.HasTypeMapper.DATABASE_TYPE;
import static com.speedment.runtime.config.trait.HasTypeMapper.TYPE_MAPPER;
import com.speedment.tool.config.DocumentProperty;
import java.util.Optional;
import static javafx.beans.binding.Bindings.createObjectBinding;
import javafx.beans.binding.ObjectBinding;
import javafx.beans.property.StringProperty;
/**
* A trait for documents that have a {@code TypeMapper} specified. This
* corresponds to the {@link HasTypeMapper} trait but for observable documents.
*
* @author Emil Forslund
* @since 3.0.2
*/
public interface HasTypeMapperProperty extends DocumentProperty, HasTypeMapper {
default StringProperty typeMapperProperty() {
return stringPropertyOf(TYPE_MAPPER,
() -> HasTypeMapper.super.getTypeMapper().orElse(null)
);
}
@Override
default Optional<String> getTypeMapper() {
return Optional.ofNullable(typeMapperProperty().get());
}
@Override
default String getDatabaseType() {
return databaseTypeProperty().get();
}
@Override
default Class<?> findDatabaseType() {
return databaseTypeObjectProperty().get();
}
default StringProperty databaseTypeProperty() {
return stringPropertyOf(
DATABASE_TYPE,
HasTypeMapper.super::getDatabaseType
);
}
default ObjectBinding<Class<?>> databaseTypeObjectProperty() {
return createObjectBinding(
HasTypeMapper.super::findDatabaseType,
databaseTypeProperty()
);
}
Column getMappedColumn();
}