Skip to content

Commit

Permalink
refactored abstract expression base classes
Browse files Browse the repository at this point in the history
  • Loading branch information
chaudum authored and mfussenegger committed Jul 2, 2015
1 parent 6ce4513 commit 2929110
Show file tree
Hide file tree
Showing 36 changed files with 128 additions and 114 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
* 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
* 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
Expand All @@ -21,7 +21,9 @@

package io.crate.metadata;

public interface ReferenceImplementation {
import io.crate.operation.Input;

public interface ReferenceImplementation<T> extends Input<T> {

/**
* Returns an implementation for a child.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@

import io.crate.operation.Input;

public abstract class RowContextCollectorExpression<R, T> implements ReferenceImplementation, Input<T> {
public abstract class RowContextCollectorExpression<R, T> implements ReferenceImplementation<T> {

protected final ReferenceInfo info;
protected R row;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,16 @@
* software solely pursuant to the terms of the relevant commercial agreement.
*/

package io.crate.metadata.sys;
package io.crate.metadata;

import io.crate.metadata.ReferenceImplementation;
import io.crate.operation.Input;

/**
* Base class for system expressions. Implementations of system expressions should inherit from it.
* Base class for expressions. Implementations of expressions should inherit from it.
* @param <T> The returnType of the expression
*/
public abstract class SysExpression<T> implements ReferenceImplementation, Input<T> {
public abstract class SimpleObjectExpression<T> implements ReferenceImplementation<T> {

@Override
public ReferenceImplementation getChildImplementation(String name) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
* Base class for information_schema expressions.
* @param <T> The returnType of the expression
*/
public abstract class RowCollectExpression<R, T> implements ReferenceImplementation, Input<T> {
public abstract class RowCollectExpression<R, T> implements ReferenceImplementation<T> {

protected final ReferenceInfo info;
protected R row;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,5 @@

import io.crate.metadata.ReferenceImplementation;

public interface ShardReferenceImplementation extends ReferenceImplementation {
public interface ShardReferenceImplementation<T> extends ReferenceImplementation<T> {
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,5 @@

import io.crate.metadata.ReferenceImplementation;

public interface BlobShardReferenceImplementation extends ReferenceImplementation {
public interface BlobShardReferenceImplementation<T> extends ReferenceImplementation<T> {
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import io.crate.metadata.sys.SysShardsTableInfo;
import io.crate.operation.Input;

public abstract class UnassignedShardCollectorExpression<T> implements ReferenceImplementation, Input<T> {
public abstract class UnassignedShardCollectorExpression<T> implements ReferenceImplementation<T> {

private final ReferenceInfo info;
protected UnassignedShard row;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,30 +19,32 @@
* software solely pursuant to the terms of the relevant commercial agreement.
*/

package io.crate.operation.reference.sys;
package io.crate.operation.reference;

import io.crate.metadata.ReferenceImplementation;
import io.crate.metadata.sys.SysExpression;
import org.apache.lucene.util.BytesRef;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

public abstract class SysObjectReference extends SysExpression<Map<String, Object>>
implements ReferenceImplementation {
public abstract class NestedObjectExpression implements ReferenceImplementation<Map<String, Object>> {

protected final Map<String, SysExpression> childImplementations = new HashMap<>();
protected final Map<String, ReferenceImplementation> childImplementations = new HashMap<>();

public Map<String, ReferenceImplementation> getChildImplementations() {
return childImplementations;
}

@Override
public SysExpression getChildImplementation(String name) {
public ReferenceImplementation getChildImplementation(String name) {
return childImplementations.get(name);
}

@Override
public Map<String,Object> value() {
Map<String, Object> map = new HashMap<>();
for (Map.Entry<String, SysExpression> e : childImplementations.entrySet()) {
for (Map.Entry<String, ReferenceImplementation> e : childImplementations.entrySet()) {
Object value = e.getValue().value();

// convert nested columns of type e.getValue().value() to String here
Expand All @@ -54,4 +56,5 @@ public Map<String,Object> value() {
}
return Collections.unmodifiableMap(map);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
import io.crate.operation.Input;
import org.apache.lucene.util.BytesRef;

public class PartitionedColumnExpression implements Input, ShardReferenceImplementation {
public class PartitionedColumnExpression implements ShardReferenceImplementation {

private final Object value;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,10 @@
package io.crate.operation.reference.sys;

import io.crate.metadata.ColumnIdent;
import io.crate.metadata.ReferenceInfo;
import io.crate.metadata.sys.SysClusterTableInfo;
import io.crate.operation.reference.NestedObjectExpression;

public abstract class SysClusterObjectReference extends SysObjectReference {
public abstract class SysClusterObjectReference extends NestedObjectExpression {

protected SysClusterObjectReference(String name) {
this(new ColumnIdent(name));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package io.crate.operation.reference.sys;

import io.crate.operation.reference.NestedObjectExpression;
import io.crate.operation.reference.sys.node.SysNodeExpression;

public abstract class SysNodeObjectReference extends SysObjectReference {
public abstract class SysNodeObjectReference extends NestedObjectExpression {

protected abstract class ChildExpression<T> extends SysNodeExpression<T> {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,32 +24,33 @@
import com.google.common.base.Function;
import com.google.common.collect.Maps;
import io.crate.metadata.ReferenceImplementation;
import io.crate.metadata.sys.SysExpression;
import io.crate.metadata.SimpleObjectExpression;
import io.crate.operation.reference.NestedObjectExpression;
import org.apache.lucene.util.BytesRef;

import javax.annotation.Nullable;
import java.util.List;
import java.util.Map;

public abstract class SysObjectArrayReference extends SysExpression<Object[]>
implements ReferenceImplementation {
public abstract class SysObjectArrayReference extends SimpleObjectExpression<Object[]>
implements ReferenceImplementation<Object[]> {

protected abstract List<SysObjectReference> getChildImplementations();
protected abstract List<NestedObjectExpression> getChildImplementations();

@Override
public SysExpression<Object[]> getChildImplementation(String name) {
List<SysObjectReference> childImplementations = getChildImplementations();
public ReferenceImplementation<Object[]> getChildImplementation(String name) {
List<NestedObjectExpression> childImplementations = getChildImplementations();
assert childImplementations.size() > 0;
final Object[] values = new Object[childImplementations.size()];
int i = 0;
for (SysObjectReference sysObjectReference : childImplementations) {
SysExpression<?> child = sysObjectReference.getChildImplementation(name);
for (NestedObjectExpression sysObjectReference : childImplementations) {
ReferenceImplementation<?> child = sysObjectReference.getChildImplementation(name);
if (child != null) {
Object value = child.value();
values[i++] = value;
}
}
return new SysExpression<Object[]>() {
return new SimpleObjectExpression<Object[]>() {
@Override
public Object[] value() {
return values;
Expand All @@ -62,14 +63,14 @@ public Object[] value() {

@Override
public Object[] value() {
List<SysObjectReference> childImplementations = getChildImplementations();
List<NestedObjectExpression> childImplementations = getChildImplementations();
Object[] values = new Object[childImplementations.size()];
int i = 0;
for (SysObjectReference expression : childImplementations) {
Map<String, Object> map = Maps.transformValues(expression.childImplementations, new Function<SysExpression, Object>() {
for (NestedObjectExpression expression : childImplementations) {
Map<String, Object> map = Maps.transformValues(expression.getChildImplementations(), new Function<ReferenceImplementation, Object>() {
@Nullable
@Override
public Object apply(@Nullable SysExpression input) {
public Object apply(@Nullable ReferenceImplementation input) {
Object value = input.value();
if (value != null && value instanceof BytesRef) {
return ((BytesRef) value).utf8ToString();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,17 @@

package io.crate.operation.reference.sys;

import io.crate.operation.reference.NestedObjectExpression;

import java.util.ArrayList;
import java.util.List;

public abstract class SysStaticObjectArrayReference extends SysObjectArrayReference {

protected final List<SysObjectReference> childImplementations = new ArrayList<>();
protected final List<NestedObjectExpression> childImplementations = new ArrayList<>();

@Override
protected List<SysObjectReference> getChildImplementations() {
protected List<NestedObjectExpression> getChildImplementations() {
return childImplementations;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,10 @@

import io.crate.metadata.ColumnIdent;
import io.crate.metadata.ReferenceImplementation;
import io.crate.metadata.ReferenceInfo;
import io.crate.metadata.sys.SysClusterTableInfo;
import io.crate.metadata.sys.SysExpression;
import org.elasticsearch.common.Preconditions;

public abstract class SysClusterExpression<T> extends SysExpression<T> implements ReferenceImplementation {
import io.crate.metadata.SimpleObjectExpression;

public abstract class SysClusterExpression<T> extends SimpleObjectExpression<T> {

protected SysClusterExpression(String name) {
this(new ColumnIdent(name));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@

package io.crate.operation.reference.sys.node;

import io.crate.metadata.sys.SysExpression;
import io.crate.operation.reference.sys.SysObjectReference;
import io.crate.metadata.ReferenceImplementation;
import io.crate.operation.reference.NestedObjectExpression;
import io.crate.operation.reference.sys.node.fs.NodeFsExpression;
import org.elasticsearch.cluster.ClusterService;
import org.elasticsearch.common.inject.Inject;
Expand All @@ -39,7 +39,7 @@
import java.util.Arrays;
import java.util.Collection;

public class NodeSysExpression extends SysObjectReference {
public class NodeSysExpression extends NestedObjectExpression {

private final NodeService nodeService;
private final OsService osService;
Expand Down Expand Up @@ -85,7 +85,7 @@ public NodeSysExpression(ClusterService clusterService,
}

@Override
public SysExpression getChildImplementation(String name) {
public ReferenceImplementation getChildImplementation(String name) {
if (EXPRESSIONS_WITH_OS_STATS.contains(name)) {
OsStats osStats = osService.stats();
if (NodeMemoryExpression.NAME.equals(name)) {
Expand All @@ -105,5 +105,4 @@ public SysExpression getChildImplementation(String name) {
}
return super.getChildImplementation(name);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@
package io.crate.operation.reference.sys.node;

import io.crate.metadata.ReferenceImplementation;
import io.crate.metadata.sys.SysExpression;
import io.crate.metadata.SimpleObjectExpression;

public abstract class SysNodeExpression<T> extends SysExpression<T> implements ReferenceImplementation {
public abstract class SysNodeExpression<T> extends SimpleObjectExpression<T> {

}
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
import io.crate.metadata.ColumnIdent;
import io.crate.operation.reference.sys.SysNodeObjectReference;
import io.crate.operation.reference.sys.SysNodeStaticObjectArrayReference;
import io.crate.operation.reference.sys.SysObjectReference;
import io.crate.operation.reference.NestedObjectExpression;
import org.apache.lucene.util.BytesRef;
import org.elasticsearch.common.logging.ESLogger;
import org.elasticsearch.common.logging.Loggers;
Expand All @@ -52,7 +52,7 @@ protected NodeFsDataExpression(SigarService sigarService, NodeEnvironment nodeEn
}

@Override
protected List<SysObjectReference> getChildImplementations() {
protected List<NestedObjectExpression> getChildImplementations() {
if (childImplementations.isEmpty()) {
addChildImplementations();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
import io.crate.metadata.ColumnIdent;
import io.crate.operation.reference.sys.SysNodeObjectArrayReference;
import io.crate.operation.reference.sys.SysNodeObjectReference;
import io.crate.operation.reference.sys.SysObjectReference;
import io.crate.operation.reference.NestedObjectExpression;
import org.apache.lucene.util.BytesRef;
import org.elasticsearch.common.logging.ESLogger;
import org.elasticsearch.common.logging.Loggers;
Expand All @@ -50,8 +50,8 @@ public class NodeFsDisksExpression extends SysNodeObjectArrayReference {
}

@Override
protected List<SysObjectReference> getChildImplementations() {
List<SysObjectReference> diskRefs;
protected List<NestedObjectExpression> getChildImplementations() {
List<NestedObjectExpression> diskRefs;
if (sigarService.sigarAvailable()) {
try {
FileSystem[] fileSystems = sigarService.sigar().getFileSystemList();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@
package io.crate.operation.reference.sys.shard;

import io.crate.metadata.shard.ShardReferenceImplementation;
import io.crate.metadata.sys.SysExpression;
import io.crate.metadata.SimpleObjectExpression;

public abstract class SysShardExpression<T> extends SysExpression<T> implements ShardReferenceImplementation {
public abstract class SysShardExpression<T> extends SimpleObjectExpression<T> {

}
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.index.shard.ShardId;

public class BlobShardIdExpression extends ShardIdExpression implements BlobShardReferenceImplementation {
public class BlobShardIdExpression extends ShardIdExpression implements BlobShardReferenceImplementation<Integer> {

@Inject
public BlobShardIdExpression(ShardId shardId) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
import io.crate.operation.reference.sys.shard.SysShardExpression;
import org.elasticsearch.common.inject.Inject;

public class BlobShardNumDocsExpression extends SysShardExpression<Long> implements BlobShardReferenceImplementation {
public class BlobShardNumDocsExpression extends SysShardExpression<Long> implements BlobShardReferenceImplementation<Long> {
public static final String NAME = "num_docs";

private final BlobShard blobShard;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
import org.apache.lucene.util.BytesRef;
import org.elasticsearch.common.inject.Inject;

public class BlobShardPartitionIdentExpression extends SysShardExpression<BytesRef> implements BlobShardReferenceImplementation {
public class BlobShardPartitionIdentExpression extends SysShardExpression<BytesRef> implements BlobShardReferenceImplementation<BytesRef> {

public static final String NAME = "partition_ident";
private static final BytesRef value = new BytesRef("");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
import io.crate.operation.reference.sys.shard.SysShardExpression;
import org.elasticsearch.common.inject.Inject;

public class BlobShardPartitionOrphanedExpression extends SysShardExpression<Boolean> implements BlobShardReferenceImplementation {
public class BlobShardPartitionOrphanedExpression extends SysShardExpression<Boolean> implements BlobShardReferenceImplementation<Boolean> {

public static final String NAME = "orphan_partition";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.index.shard.service.IndexShard;

public class BlobShardPrimaryExpression extends ShardPrimaryExpression implements BlobShardReferenceImplementation {
public class BlobShardPrimaryExpression extends ShardPrimaryExpression implements BlobShardReferenceImplementation<Boolean> {

@Inject
public BlobShardPrimaryExpression(IndexShard indexShard) {
Expand Down
Loading

0 comments on commit 2929110

Please sign in to comment.