Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: new tool files #289

Merged
merged 1 commit into from
Jun 21, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,6 @@ class MarkdownApiExporter {
}
} catch (e: Exception) {
logger.traceError("Apis save failed", e)

}
}
} catch (e: Exception) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -891,7 +891,7 @@ class ApiCallDialog : JDialog() {
}
val url = this.currUrl
// var request = this.currRequest
fileSaveHelper!!.save({
fileSaveHelper!!.saveBytes({
bytes
}, {
var fileName = response.getHeaderFileName()
Expand All @@ -906,7 +906,7 @@ class ApiCallDialog : JDialog() {
else -> url.substringAfterLast("/").substringBefore("?")
}
}
return@save fileName
return@saveBytes fileName
}, {
logger!!.info("save response success")
}, {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import com.itangcent.common.utils.GsonUtils
import com.itangcent.common.utils.KV
import com.itangcent.common.utils.notNullOrBlank
import com.itangcent.common.utils.notNullOrEmpty
import com.itangcent.intellij.util.ToolUtils
import org.apache.commons.lang3.StringUtils
import org.apache.commons.lang3.time.DateFormatUtils
import java.util.*
Expand All @@ -22,6 +23,8 @@ import kotlin.reflect.full.functions

/**
* <p>Util operations for rule.</p>
* For rules only.
* @see StandardJdkRuleParser
*/
@ScriptTypeName("tool")
class RuleToolUtils {
Expand Down Expand Up @@ -908,6 +911,10 @@ class RuleToolUtils {
return typeMapper[qualifiedName] ?: qualifiedName
}

fun copy2Clipboard(str: String) {
ToolUtils.copy2Clipboard(str)
}

companion object {
private val excludedMethods = Arrays.asList("hashCode", "toString", "equals", "getClass", "clone", "notify", "notifyAll", "wait", "finalize")

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,16 @@ import com.itangcent.annotation.script.ScriptReturn
import com.itangcent.annotation.script.ScriptTypeName
import com.itangcent.idea.plugin.utils.LocalStorageUtils
import com.itangcent.idea.plugin.utils.RegexUtils
import com.itangcent.idea.utils.Charsets
import com.itangcent.idea.utils.FileSaveHelper
import com.itangcent.intellij.config.ConfigReader
import com.itangcent.intellij.config.rule.RuleContext
import com.itangcent.intellij.context.ActionContext
import com.itangcent.intellij.jvm.LinkExtractor
import com.itangcent.intellij.jvm.LinkResolver
import com.itangcent.intellij.util.FileUtils
import com.itangcent.suv.http.HttpClientProvider
import java.nio.charset.Charset
import javax.script.*

abstract class StandardJdkRuleParser : ScriptRuleParser() {
Expand Down Expand Up @@ -65,7 +69,8 @@ abstract class StandardJdkRuleParser : ScriptRuleParser() {
engineBindings["localStorage"] = localStorageUtils
engineBindings["helper"] = Helper(context.getPsiContext())
engineBindings["httpClient"] = httpClientProvider!!.getHttpClient()
engineBindings["config"] = actionContext!!.instance(Config::class)
engineBindings["files"] = actionContext!!.instance(Files::class)
engineBindings["config"] = actionContext.instance(Config::class)
}

@Inject
Expand Down Expand Up @@ -136,6 +141,75 @@ abstract class StandardJdkRuleParser : ScriptRuleParser() {
}
}

@ScriptTypeName("files")
class Files {

@Inject
private val fileSaveHelper: FileSaveHelper? = null

fun saveWithUI(content: (String) -> String,
defaultFileName: String?,
onSaveSuccess: () -> Unit,
onSaveFailed: () -> Unit,
onSaveCancel: () -> Unit) {
saveWithUI(content,
kotlin.text.Charsets.UTF_8,
defaultFileName,
onSaveSuccess,
onSaveFailed,
onSaveCancel)
}

fun saveWithUI(content: (String) -> String,
charset: String,
defaultFileName: String?,
onSaveSuccess: () -> Unit,
onSaveFailed: () -> Unit,
onSaveCancel: () -> Unit) {
saveWithUI(content,
Charsets.forName(charset)!!.charset(),
defaultFileName,
onSaveSuccess,
onSaveFailed,
onSaveCancel)

}

private fun saveWithUI(content: (String) -> String,
charset: Charset,
defaultFileName: String?,
onSaveSuccess: () -> Unit,
onSaveFailed: () -> Unit,
onSaveCancel: () -> Unit) {
fileSaveHelper!!.saveBytes(
{
content(it).toByteArray(charset)
},
{
defaultFileName
},
onSaveSuccess, onSaveFailed, onSaveCancel
)
}

fun save(content: String, path: String) {
save(content, kotlin.text.Charsets.UTF_8, path)
}

fun save(content: String,
charset: String,
path: String) {
save(content, Charsets.forName(charset)!!.charset(), path)
}

private fun save(content: String,
charset: Charset,
path: String) {
FileUtils.forceSave(path, content.toByteArray(charset))
}

}

companion object {
private val toolBindings: Bindings

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,41 +5,76 @@ import java.util.function.Function

object KtHelper {

@Deprecated(message = "use [asConsumer]", replaceWith = ReplaceWith(
"asConsumer(callBack)",
"com.itangcent.idea.plugin.utils.KtHelper.asConsumer"))
@Suppress("UNCHECKED_CAST", "UNUSED")
public fun <T : kotlin.Any> ktFunction(callBack: Any): (T) -> kotlin.Unit {
fun <T : kotlin.Any> ktFunction(callBack: Any): (T) -> kotlin.Unit {
return asConsumer(callBack)
}

@Suppress("UNCHECKED_CAST", "UNUSED")
fun <T : kotlin.Any> asConsumer(callBack: Any): (T) -> kotlin.Unit {
try {
(callBack as (T) -> kotlin.Unit)
return callBack
} catch (e: Exception) {
if (callBack is Function1<*, *>) {
return {
(callBack as Function1<Any?, Any?>).invoke(it)
}
}
if (callBack is kotlin.Function1<*, *>) {
}
when (callBack) {
is Function1<*, *> -> {
return {
(callBack as Function1<Any?, Any?>).invoke(it)
}
}
if (callBack is Function<*, *>) {
is Function<*, *> -> {
return {
(callBack as Function<Any?, Any?>).apply(it as Any?)
}
}
if (callBack is Consumer<*>) {
is Consumer<*> -> {
return {
(callBack as Consumer<Any?>).accept(it as Any?)
}
}
if (callBack is groovy.lang.Closure<*>) {
is groovy.lang.Closure<*> -> {
return {
(callBack as groovy.lang.Closure<Any?>).call(it as Any?)
}
}
else -> throw ClassCastException("$callBack cannot be cast to kotlin.jvm.functions.Function1")
}
}

throw ClassCastException("$callBack cannot be cast to kotlin.jvm.functions.Function1")
@Suppress("UNCHECKED_CAST", "UNUSED")
fun <T : kotlin.Any, R : kotlin.Any> asFunction(callBack: Any): (T) -> (R?) {
try {
return (callBack as (T) -> R)
} catch (e: Exception) {
}
when (callBack) {
is Function1<*, *> -> {
return {
(callBack as Function1<Any?, Any?>).invoke(it) as R?
}
}
is Function<*, *> -> {
return {
(callBack as Function<Any?, Any?>).apply(it as Any?) as R?
}
}
is Consumer<*> -> {
return {
(callBack as Consumer<Any?>).accept(it as Any?)
null
}
}
is groovy.lang.Closure<*> -> {
return {
(callBack as groovy.lang.Closure<Any?>).call(it as Any?) as R?
}
}
else -> throw ClassCastException("$callBack cannot be cast to kotlin.jvm.functions.Function1")
}
}

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.itangcent.idea.plugin.utils

import com.itangcent.annotation.script.ScriptTypeName
import com.itangcent.idea.plugin.rule.StandardJdkRuleParser
import org.apache.commons.lang3.StringUtils
import java.util.*
import java.util.concurrent.locks.ReentrantReadWriteLock
Expand Down
Loading