parent
a524fd3e5a
commit
c9eb57132b
@ -0,0 +1,29 @@ |
||||
|
||||
/* |
||||
* Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria)
|
||||
* |
||||
* 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.arialyy.aria.core.loader; |
||||
|
||||
/** |
||||
* 用于初始化一些常用的常量 |
||||
*/ |
||||
public final class ConstantIntercept implements ILoaderInterceptor { |
||||
|
||||
|
||||
|
||||
@Override public ILoader intercept(Chain chain) { |
||||
return null; |
||||
} |
||||
} |
@ -0,0 +1,29 @@ |
||||
/* |
||||
* Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria)
|
||||
* |
||||
* 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.arialyy.aria.core.loader; |
||||
|
||||
public interface ILoader { |
||||
|
||||
void start(); |
||||
|
||||
void stop(); |
||||
|
||||
void isBreak(); |
||||
|
||||
String getKey(); |
||||
|
||||
long getCurrentProgress(); |
||||
} |
@ -0,0 +1,41 @@ |
||||
/* |
||||
* Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria)
|
||||
* |
||||
* 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.arialyy.aria.core.loader; |
||||
|
||||
import com.arialyy.aria.core.TaskRecord; |
||||
import com.arialyy.aria.core.listener.IEventListener; |
||||
import com.arialyy.aria.core.wrapper.ITaskWrapper; |
||||
|
||||
/** |
||||
* 拦截器 |
||||
*/ |
||||
public interface ILoaderInterceptor { |
||||
|
||||
ILoader intercept(Chain chain); |
||||
|
||||
interface Chain { |
||||
|
||||
void updateRecord(TaskRecord record); |
||||
|
||||
TaskRecord getRecord(); |
||||
|
||||
IEventListener getListener(); |
||||
|
||||
ITaskWrapper getWrapper(); |
||||
|
||||
ILoader proceed(); |
||||
} |
||||
} |
@ -0,0 +1,75 @@ |
||||
/* |
||||
* Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria)
|
||||
* |
||||
* 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.arialyy.aria.core.loader; |
||||
|
||||
import com.arialyy.aria.core.TaskRecord; |
||||
import com.arialyy.aria.core.listener.IEventListener; |
||||
import com.arialyy.aria.core.wrapper.ITaskWrapper; |
||||
import java.util.List; |
||||
|
||||
/** |
||||
* 责任链 |
||||
*/ |
||||
public final class LoaderChain implements ILoaderInterceptor.Chain { |
||||
private ITaskWrapper wrapper; |
||||
private IEventListener listener; |
||||
private TaskRecord taskRecord; |
||||
private int index; |
||||
private List<ILoaderInterceptor> interceptors; |
||||
|
||||
public LoaderChain(List<ILoaderInterceptor> interceptors, ITaskWrapper wrapper, |
||||
IEventListener listener, TaskRecord taskRecord, |
||||
int index) { |
||||
this.interceptors = interceptors; |
||||
this.wrapper = wrapper; |
||||
this.listener = listener; |
||||
this.taskRecord = taskRecord; |
||||
this.index = index; |
||||
} |
||||
|
||||
@Override public void updateRecord(TaskRecord record) { |
||||
this.taskRecord = record; |
||||
} |
||||
|
||||
@Override public TaskRecord getRecord() { |
||||
return taskRecord; |
||||
} |
||||
|
||||
@Override public IEventListener getListener() { |
||||
return listener; |
||||
} |
||||
|
||||
@Override public ITaskWrapper getWrapper() { |
||||
return wrapper; |
||||
} |
||||
|
||||
@Override public ILoader proceed() { |
||||
int index = this.index + 1; |
||||
if (index >= interceptors.size()) { |
||||
throw new AssertionError(); |
||||
} |
||||
|
||||
LoaderChain next = new LoaderChain(interceptors, wrapper, listener, taskRecord, index); |
||||
ILoaderInterceptor interceptor = interceptors.get(index); |
||||
ILoader loader = interceptor.intercept(next); |
||||
|
||||
if (loader == null) { |
||||
throw new NullPointerException("Loader为空"); |
||||
} |
||||
|
||||
return loader; |
||||
} |
||||
} |
@ -0,0 +1,47 @@ |
||||
/* |
||||
* Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria)
|
||||
* |
||||
* 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.arialyy.aria.core.loader; |
||||
|
||||
public class LoaderIntercept implements ILoaderInterceptor, ILoader { |
||||
|
||||
|
||||
|
||||
@Override public ILoader intercept(Chain chain) { |
||||
|
||||
|
||||
return this; |
||||
} |
||||
|
||||
@Override public void start() { |
||||
|
||||
} |
||||
|
||||
@Override public void stop() { |
||||
|
||||
} |
||||
|
||||
@Override public void isBreak() { |
||||
|
||||
} |
||||
|
||||
@Override public String getKey() { |
||||
return null; |
||||
} |
||||
|
||||
@Override public long getCurrentProgress() { |
||||
return 0; |
||||
} |
||||
} |
@ -0,0 +1,39 @@ |
||||
/* |
||||
* Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria)
|
||||
* |
||||
* 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.arialyy.aria.core.loader; |
||||
|
||||
import com.arialyy.aria.core.common.RecordHandler; |
||||
import com.arialyy.aria.core.inf.IRecordHandlerAdapter; |
||||
import com.arialyy.aria.core.wrapper.AbsTaskWrapper; |
||||
|
||||
/** |
||||
* 任务记录拦截器,用于处理任务记录 |
||||
*/ |
||||
public final class RecordInterceptor implements ILoaderInterceptor { |
||||
private IRecordHandlerAdapter adapter; |
||||
|
||||
public RecordInterceptor(IRecordHandlerAdapter adapter) { |
||||
this.adapter = adapter; |
||||
} |
||||
|
||||
@Override public ILoader intercept(Chain chain) { |
||||
RecordHandler recordHandler = new RecordHandler((AbsTaskWrapper) chain.getWrapper()); |
||||
recordHandler.setAdapter(adapter); |
||||
chain.updateRecord(recordHandler.getRecord()); |
||||
|
||||
return chain.proceed(); |
||||
} |
||||
} |
Loading…
Reference in new issue